2010-07-03 4 views
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?

ответ

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). 
+0

Если я хочу разрешить пустые параметры, добавлю ли строки params :: = SEPARATOR? – chiborg