0

我正在编写一个解析器,它可以解析像myfunc1(),myfunc2(param1)myfunc3(param1, param2)(带有未知数量的参数)这样的表达式。现在我正试图让我的解析表达式正确。我正在使用Lemon Parser Generator。这是我想出的:

application(res) ::= APPLICATIONNAME(a) BRACE_OPEN params BRACE_CLOSE. {res = a;}
application(res) ::= APPLICATIONNAME(a) BRACE_OPEN BRACE_CLOSE. {res = a;}
params ::= PARAM(p). {res = p;}
params ::= SEPARATOR. 

暂时不要介意花括号的内容。该params定义允许空参数(彼此之后的几个分隔符),目前可以。但是我将如何更改定义以强制非空参数但仍然让所有参数由SEPARATOR令牌分隔?

4

1 回答 1

1

按照http://www.hwaci.com/sw/lemon/lemon.html的例子

list ::= list element.      // left-recursion.  Good!
list ::= .

wherelist要么是空的(第二条规则)要么包含至少一个elementselement用空格分隔,我会说你想要

params ::= params SEPARATOR PARAM(p).
params ::= PARAM(p).
于 2010-07-03T08:46:24.423 回答