c_cpp 一些YACC语法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 一些YACC语法相关的知识,希望对你有一定的参考价值。
%{
#include <stdio.h>
%}
%%
command : expr '\n' { printf("The result is: %d\n",$1); }
;
expr :
expr '+' term
{ $$ = $1 + $3; }
|
term
{ $$ = $1; }
|
expr '%' term
{ $$ = $1 % $3; }
|
expr '/' term
{ $$ = $1 / $3; }
|
expr '-' term
{ $$ = $1 - $3; }
;
term :
term '*' factor
{ $$ = $1 * $3; }
|
factor
{ $$ = $1; }
;
factor : number { $$ = $1; }
| '(' expr ')' { $$ = $2; }
;
number : number digit { $$ = 10 * $1 + $2; }
| digit { $$ = $1; }
;
digit : '0' { $$ = 0; }
| '1' { $$ = 1; }
| '2' { $$ = 2; }
| '3' { $$ = 3; }
| '4' { $$ = 4; }
| '5' { $$ = 5; }
| '6' { $$ = 6; }
| '7' { $$ = 7; }
| '8' { $$ = 8; }
| '9' { $$ = 9; }
;
%%
main()
{ yyparse();
return 0;
}
int yylex(void)
{ static int done = 0; /* flag to end parse */
int c;
if (done) return 0; /* stop parse */
c = getchar();
if (c == '\n') done = 1; /* next call will end parse */
return c;
}
int yyerror(char *s)
/* allows for printing error message */
{ printf("%s\n",s);
}
以上是关于c_cpp 一些YACC语法的主要内容,如果未能解决你的问题,请参考以下文章
lex & yacc 文件中的语法错误
有 Yacc 语法调试器吗?
Lex & Yacc
Yacc 与 Lex 快速入门(词法分析和语法分析)
Lex Yacc 入门
验证Yacc的使用