如何在yacc中解释此规则? “ ::” {yycolumn + = yyleng;返回(TYPESEPnumber); }

时间:2018-11-28 08:51:52

标签: parsing yacc lex

我必须修复用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; "中。救命..  谢谢!

1 个答案:

答案 0 :(得分:1)

这意味着令牌::作为TYPESEPnumber发送到解析器。 (我不知道为什么有人会在令牌ID的末尾添加number。)

所以我希望解析器的序言包括:

%token TYPESEPnumber "::"

还有类似的产品

declaration: ID "::" type ';'

(某些教授没有使用bison的便捷语法来为笨重的标记标识符加上别名,以方便理解加引号的字符串。但这使语法更易于阅读。)