如何解析带括号的表达式?
How to parse expression with parenthesis?
我想使用 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 ));
要解析此类示例,您的语法需要更改为:
- 接收多个
Model
s(我创建了一个 Script
规则,该规则采用分号分隔的模型)
- 允许
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 ')'
;
我希望这能回答您的问题或给您一些提示来处理括号表达式。
我想使用 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 ));
要解析此类示例,您的语法需要更改为:
- 接收多个
Model
s(我创建了一个Script
规则,该规则采用分号分隔的模型) - 允许
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 ')'
;
我希望这能回答您的问题或给您一些提示来处理括号表达式。