Выражение парсера для параметров вызова функций через запятую

Я пишу парсер, чем могу разобрать выражения, как 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).
Другие вопросы по тегам