1

我正在用 jflex + javacup 做一个语法分析器。在 .cup 语法中,我有这部分:

   SUBPPARAMLIST ::= lambda | "(" EXPLIST ")"

其中 lambda 没有任何意义(SUBPPARAMLIST 可以为空)

好吧,我设法在我的 .flex 中正确创建了所有标记,但我不知道如何创建 lambda 符号。我希望你们能帮助我,如果你不明白我的问题,请告诉我


WhatDoIWriteHere{return symbol(sym.lambda);}
4

1 回答 1

1

空产生式(你称之为“lambda”)不需要符号,因为它是空的。您可以通过生产规则来表达这一点:

SUBPPARAMLIST ::= lambda | "(" EXPLIST ")" ;
lambda ::=  ;

引用:语法中的每个产生式都有一个左侧非终结符,后跟符号“::=”,然后是一系列零个或多个动作、终结符或非终结符,然后是可选的上下文优先级分配,并以分号 (;) 结束。注意“......零个或多个......”

可能语法解析器也能够处理这个:

SUBPPARAMLIST ::= "(" EXPLIST ")" | ;
于 2016-03-26T06:59:42.853 回答