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的使用