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