2016-10-19 2 views
0

간단한 비손 프로그램으로 컴파일 할 때 오류 1.1이 발생합니다. 구문 오류, 예기치 않은 파일 끝입니다. 들소 : 입력/출력 오류. 나는 들소 -d hw3.y를 사용하여 컴파일구문을 계속 가져 오는 간단한 들소 파일 1.1 오류

다음과 같이 코드는 다음과 같습니다 line에 대한 당신은 생산에 ;없는 한

%{ 
    #include <stdio.h> 
%} 
%token NUMBER 
%left '+' '-' 
%left '*' '/' 

%% 
input 
    : /* allow empty input */ 
    | input line 
    ; 
line 
    : expr '\n' { printf("Result is %f\n", $1); } 
expr 
    : expr '+' term { $$ = $1 + $3; } 
    | expr '-' term { $$ = $1 - $3; } 
    | term { $$ = $1; } 
    ; 
term 
    : term '*' factor { $$ = $1 * $3; } 
    | term '/' factor { $$ = $1/$3; } 
    | factor { $$ = $1; } 
    ; 
factor 
    : '(' expr ')' { $$ = $2; } 
    | NUMBER { $$ = $1; } 
    | '-' NUMBER { $$ = -$2; } 
    ; 
    %% 


    /* display error message */ 
    int yyerror(char *errmsg) { printf("%s\n", errmsg); } 
    /* main */ 
    int main() { 
    printf("type an expression:\n"); 
    yyparse(); 
    } 
+0

_ 그 _ 오류가 발생합니까? Bison을 실행할 때, 결과로 생성 된 C 코드를 컴파일 할 때 또는 파서를 실행할 때? Bison을 실행할 때라면 Bison을 통해 코드를 실행하려고 할 때 오류가 표시되지 않습니다. 어떤 버전의 Bison을 사용하고 있습니까? 이 코드가 사용중인 정확한 코드입니까? –

답변

0

합니다. 이러한 오류를 즉시 표시하는 이러한 파일 형식을 더 잘 표현할 수 있습니다. 중괄호와 주석에 올바른 닫힘과 인용 된 문자열 및 문자가 있는지 확인하십시오.

+1

Bison에는 세미콜론이 필요하지 않습니다 (posix에 따라 yacc도 마찬가지입니다). '%}'줄이 실제로 편집되지 않은 OP에서와 같이 공백으로 시작한다면, 그것은 코드 블럭을 종료하는 것으로 인식되지 않을 수도 있습니다. – rici

관련 문제