Compiler construction YACC的输出是什么?
我有一个下面列出的lex程序,它识别(词法分析)特定的标记,并在从键盘输入时将它们输出到屏幕。我想使用yacc对下面的代码进行语法分析,但我不太明白这一部分……输出会是什么样子?下面的代码是否足够?我在网上读了很多关于yacc的文章……只需要有人给我一个简单的解释。先谢谢你Compiler construction YACC的输出是什么?,compiler-construction,yacc,lex,Compiler Construction,Yacc,Lex,我有一个下面列出的lex程序,它识别(词法分析)特定的标记,并在从键盘输入时将它们输出到屏幕。我想使用yacc对下面的代码进行语法分析,但我不太明白这一部分……输出会是什么样子?下面的代码是否足够?我在网上读了很多关于yacc的文章……只需要有人给我一个简单的解释。先谢谢你 /* Regular Definitions */ RelationalOp_1 "<" RelationalOp_2 "<=" RelationalOp_3 "=<"
/* 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()
{
}
/*常规定义*/
关系运算1“
%%
{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(“无效输入:%s\n”,yytext);
%%
main()
{
yylex();
}
yywrap()
{
}
您的问题的简短答案是否定的,您所拥有的对于使用yacc生成的解析器来说是不完整的。在lex生成的扫描器中,您希望在内存中向解析器提供令牌,而不是简单地向控制台写入内容
为了理解上下文,本文提供了一些全面的示例,并展示了lex和yacc生成的程序是如何协同工作的。您还可以查看的在线手册,这是yacc的GNU版本。这只是在解析文件时写入操作名称和令牌ID,您想做什么?在学习了flex和yacc/bison之后,我决定使用自己的解析器。当您开始这样做时,如果有真正的问题,请告诉我们。