Как разобрать выражение с круглыми скобками?
Я хотел бы проанализировать выражение с круглыми скобками в python, используя textx.
Например, следующий DSL:
CREATE boby = sacha - ( boby & tralaa) ;
CREATE boby = sacha & boby - ( david & lucas )
Это грамматика, которую я попробовал:
Model:
'CREATE' name=Identifier '=' exp=SetExpr
;
JoinOperator: /-/&/;
SetExpr:SetParExpr | SetBaseExpr
;
SetBaseExpr:
first=ID op=JoinOperator second=ID
;
SetParExpr:
'(' SetExpr ')'
Я предполагаю, что у меня должен быть список где-нибудь, чтобы заполнить выражением. Есть ли у вас предложения?
0 ответов
Я немного изменил ваши примеры: я добавил точку с запятой в конце и поставил еще одну пару скобок во втором примере. Я сделал вывод об этих изменениях на основе того, что вы указали в своей грамматике. Вот примеры:
CREATE boby = sacha - ( boby & tralaa);
CREATE boby = sacha & (boby - ( david & lucas ));
Чтобы разобрать подобные примеры, ваша грамматика должна быть изменена на:
- Взять несколько
Model
s (я создалScript
правило, которое принимает модели, разделенные точкой с запятой) - Разрешить
second
собственностьSetBaseExpr
должно быть идентификатором или SetParExpr. - + Изменить
Identifier
кID
в модельном правиле (я полагаю, это то, что вы имели в виду).
Я внес эти изменения и в итоге получил следующую грамматику, которая анализирует приведенные мной примеры:
Script:
models+=Model[';'] ';'
;
Model:
'CREATE' name=ID '=' exp=SetExpr
;
JoinOperator: '-' | '&';
SetExpr:
SetParExpr | SetBaseExpr
;
SetBaseExpr:
first=ID op=JoinOperator (second=ID | second=SetParExpr)
;
SetParExpr:
'(' SetExpr ')'
;
Я надеюсь, что это ответит на ваш вопрос или подскажет, как обращаться с выражениями в скобках.