Python 3.x 如何解析带括号的表达式?

Python 3.x 如何解析带括号的表达式?,python-3.x,textx,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 | 

我想用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 ')'
我想我应该在某个地方列一张表达的清单。
你有什么建议吗

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

CREATE boby = sacha - ( boby & tralaa);

CREATE boby = sacha & (boby - ( david & lucas ));
要分析这些示例,您的语法需要更改为:

  • 接收多个
    模型
    s(我创建了一个
    脚本
    规则,该规则采用分号分隔的模型)
  • 允许
    SetBaseExpr
    规则的
    second
    属性为ID或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 ')'
    ;
    

    我希望这能回答你的问题,或者给你一个处理插入式表达的提示。

    你看过这些例子了吗。特别地