我必须修复用yacc(解析器生成器)编写的程序,以与提供的文件“ lexer.l”一起工作以创建一个小的解释器(我无法在lexer.l中进行任何更改)。而且,我在lexer.l文件中找到了我不知道如何解释的这一行
这是未知规则...
%%
"::" { yycolumn + = yyleng; return (TYPESEPnumber); }
%%
有人可以帮助我了解"::"
在这种情况下的工作方式吗?
因此,以下测试程序应该可以工作:
程序xx是
{
a :: int;
a = 5;
print "My job is to test the print function. Here is an int: " , 55 , " and the
value of var a: " , a;
}
如果测试文件像这样简单,我就可以制作yacc解释器工作文件:
int a;
a = 5;
etc etc..
,但不在我的测试文件中的这行" a :: int; "
中。救命..
谢谢!
答案 0 :(得分:1)
这意味着令牌::
作为TYPESEPnumber
发送到解析器。 (我不知道为什么有人会在令牌ID的末尾添加number
。)
所以我希望解析器的序言包括:
%token TYPESEPnumber "::"
还有类似的产品
declaration: ID "::" type ';'
(某些教授没有使用bison的便捷语法来为笨重的标记标识符加上别名,以方便理解加引号的字符串。但这使语法更易于阅读。)