Python PLY ноль или более вхождений элемента разбора
Я использую Python с PLY для анализа L-подобных S-выражений, и при разборе вызова функции может быть ноль или более аргументов. Как я могу положить это в коде YACC. Это моя функция до сих пор:
def p_EXPR(p):
'''EXPR : NUMBER
| STRING
| LPAREN funcname [EXPR] RPAREN'''
if len(p) == 2:
p[0] = p[1]
else:
p[0] = ("Call", p[2], p[3:-1])
Мне нужно заменить "[EXPR]" на то, что позволяет ноль или более EXPR. Как я могу это сделать?
2 ответа
Решение
Как насчет этого:
EXPR : NUMBER
| STRING
| LPAREN funcname EXPR_REPEAT RPAREN
EXPR_REPEAT: /*nothing*/
| EXPR EXPR_REPEAT
Вы уверены, что хотите грамматику без контекста, а не грамматику выражения синтаксического анализа? Кроме того, по моему опыту, проект PLY очень плохо сочетает грамматику, анализ и постобработку, поэтому я бы порекомендовал реализацию с более модульным дизайном.