Syntax 我可以使用Yacc来捕获;未定义变量";语法错误?

Syntax 我可以使用Yacc来捕获;未定义变量";语法错误?,syntax,compiler-construction,bison,yacc,lex,Syntax,Compiler Construction,Bison,Yacc,Lex,例如,如果我键入prin而不是print,我希望它显示一条错误消息undefined variables或一些语法错误 这可以在Yacc中完成吗?我找不到任何有用的资源“未定义变量”不是语法错误。Yacc不会生产它。它来自语义分析阶段,您必须从头开始编写。当然,你可以在那里调用yyror()。来放大@EJP的答案:通过“键入prin而不是print”,我推断你说的是yacc生成的解析器的输入程序,而不是你用yacc处理以生成解析器的.y文件 在这种情况下,如果某个标识符在程序中的某个特定点无效,

例如,如果我键入prin而不是print,我希望它显示一条错误消息undefined variables或一些语法错误


这可以在Yacc中完成吗?我找不到任何有用的资源

“未定义变量”不是语法错误。Yacc不会生产它。它来自语义分析阶段,您必须从头开始编写。当然,你可以在那里调用yyror()。

来放大@EJP的答案:通过“键入prin而不是print”,我推断你说的是yacc生成的解析器的输入程序,而不是你用yacc处理以生成解析器的.y文件


在这种情况下,如果某个标识符在程序中的某个特定点无效,将引发语法错误并调用(您可以提供的)。在该函数中,您可以控制生成的错误消息,并访问您收集的有关程序的所有语义信息。例如,考虑代码< > PRIN <代码>是一个合法定义的变量,只是语法上的不恰当的地方。

< P>,你必须有一种方法来为YACC生成的解析器在输入程序中定义变量/函数,对吗?p> 如果是这样,您必须需要一个以存储这些定义,然后检查是否定义了特定变量,并打印所需的错误消息

光是Yacc一家,没有人支持这一点。您必须开发自己的符号表,并根据您的需要找出最佳方法