의 출력과 컴파일 및 간단한 BNF 계산기를 예제를 실행하는 동안 나는 다음과 같은 문제가 발생했습니다플렉스 및 들소 간단한 BNF 계산기 일정 나는 존 레빈에 의해 오라일리 <em>플렉스 & 들소</em> 책을 통해하고 있어요 제로
> ./fb1-5
2 + 3 * 4
= 0
2 * 3 + 4
= 0
c
Mystery Character c
error: syntax error
프로그램/DIV/덧셈/뺄셈 식 항상 제로의 정 출력 될 MULT에 따라서, 비 수치 입력 종료를 인식하지만 정수 입력을 보인다.
O'Reilly의 장을 여러 번 읽었을뿐만 아니라 스택 오버플로에 대해서도 비슷한 질문을했습니다. 나는 또한 내 실수를 찾으려고 http://dinosaur.compilertools.net/bison/bison_5.html을 통해 광업을 진행 중입니다. 겉으로보기에는 초보적인 장애물에 직면하여 당혹스러워하는 것을 주셔서 감사합니다. 나는 컴파일러를 통한 나의 여정을 시작하고있다. 모든 조언을 부탁드립니다.
플렉스 (fb1-5.L) :
%{
#include "fb1-5.tab.h" /*forward declaration - not yet compiled*/
%}
%%
"+" {return ADD;}
"-" {return SUB;}
"*" {return MUL;}
"/" {return DIV;}
[0-9]+ { yylval = atoi(yytext); return NUMBER;}
\n { return EOL;}
[ \t] { } /*ignore whitespace*/
. { printf("Mystery Character %c\n", *yytext);}
%%
들소 (fb1-5.y) :
는%{
#include <stdio.h>
%}
/*declare tokens*/
%token NUMBER
%token ADD
%token SUB
%token MUL
%token DIV
%token ABS
%token EOL
/*BNF tree*/
%%
calclist: /*nothing - matches at beginning of input*/
| calclist exp EOL { printf("= %d\n", $1);}
;
exp: factor /*default $$ = $1*/
| exp ADD factor { $$ = $1 + $3;}
| exp SUB factor { $$ = $1 - $3;}
;
factor: term /*default $$=$1*/
| factor MUL term { $$ = $1 * $3;}
| factor DIV term { $$ = $1/$3;}
;
term: NUMBER /*default $$=$1*/
| ABS term { $$ = $2 >= 0 ? $2 : - $2;}
;
%%
int main(int argc, char **argv)
{
yyparse();
return 0;
}
yyerror(char *s)
{
fprintf(stderr, "error: %s\n", s);
}
는 메이크 :
fb1-5: fb1-5.l fb1-5.y
bison -d fb1-5.y
flex fb1-5.l
gcc -o [email protected] fb1-5.tab.c lex.yy.c -lfl
clean:
rm -f core fb1-5.tab.h fb1-5.tab.c lex.yy.c fb1-5