如何用括号解析表达式?

时间:2019-05-11 19:35:03

标签: python-3.x textx

我想使用textx在python中解析带有括号的表达式。

例如以下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 ')'

我想我应该在某个地方有一个列表来填充表达式。 你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我已经稍微更改了您的示例:在末尾添加了分号,并在第二个示例中加上了另一对括号。我根据您在语法中提供的内容推断出这些更改。这是示例:

CREATE boby = sacha - ( boby & tralaa);

CREATE boby = sacha & (boby - ( david & lucas ));

要解析此类示例,您的语法需要更改为:

  1. 接受多个Model(我创建了一个Script规则,该规则采用半冒号分隔的模型)
  2. 允许second规则的SetBaseExpr属性为ID或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 ')'
;

我希望能回答您的问题或提示您处理括号表达式。