Как разобрать выражение с круглыми скобками?

Я хотел бы проанализировать выражение с круглыми скобками в 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 ));

Чтобы разобрать подобные примеры, ваша грамматика должна быть изменена на:

  1. Взять несколько Models (я создал Script правило, которое принимает модели, разделенные точкой с запятой)
  2. Разрешить second собственность SetBaseExpr должно быть идентификатором или SetParExpr.
  3. + Изменить 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 ')'
;

Я надеюсь, что это ответит на ваш вопрос или подскажет, как обращаться с выражениями в скобках.

Другие вопросы по тегам