0

我有一个下面列出的 lex 程序,它识别(词法分析)特定标记,并在从键盘输入时将它们输出到屏幕。我想使用 yacc 对下面的代码进行语法分析,但我不太明白这部分......输出会是什么样子?我的代码是否足够?我在网上读过很多关于yacc的文章……只需要有人给一个简单的解释。提前致谢...

/* Regular Definitions */
RelationalOp_1         "<"
RelationalOp_2      "<="
RelationalOp_3      "=<"    
RelationalOp_4      "=="
RelationalOp_5      "!="
RelationalOp_6      ">"
RelationalOp_7      ">="
RelationalOp_8      "=>"

%%

{RelationalOp_1}        {printf("(RelationalOp_1, %s)\n", yytext);}
{RelationalOp_2}        {printf("(RelationalOp_2, %s)\n", yytext);}
{RelationalOp_3}        {printf("(RelationalOp_3, %s)\n", yytext);}
{RelationalOp_4}        {printf("(RelationalOp_4, %s)\n", yytext);}
{RelationalOp_5}        {printf("(RelationalOp_5, %s)\n", yytext);}
{RelationalOp_6}        {printf("(RelationalOp_6, %s)\n", yytext);}
{RelationalOp_7}        {printf("(RelationalOp_7, %s)\n", yytext);}
{RelationalOp_8}        {printf("(RelationalOp_8, %s)\n", yytext);}

.                            printf("Invalid input: %s\n",yytext);

%%

main()
{
  yylex();
}

yywrap()
{
}
4

1 回答 1

0

对您的问题的简短回答是否定的,您所拥有的对于使用 yacc 生成的解析器来说是不完整的。在您的 lex 生成的扫描器中,您希望向解析器提供内存中的令牌,而不是简单地向控制台写入内容。

为了理解上下文,Pete Jinks 的讲义很全面,展示了 lex 和 yacc 生成的程序如何协同工作。您还可以查看Bison的在线手册,它是 yacc 的 GNU 版本。

于 2012-11-15T14:41:41.950 回答