逗号分隔函数调用参数的解析表达式

时间:2010-07-03 08:07:09

标签: parsing function optional-parameters bnf lemon

我编写的解析器可以解析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令牌?

1 个答案:

答案 0 :(得分:1)

遵循http://www.hwaci.com/sw/lemon/lemon.html的示例

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

其中list为空(第二条规则)或至少包含一个element,个别element由空格分隔,我想说你想要

params ::= params SEPARATOR PARAM(p).
params ::= PARAM(p).