我正在建立一个 MGrammar 规范来解析一些伪代码,以寻找特定的信息位。除了 1 个关键元素外,我的大部分规范都在工作。
伪代码支持 if-then-else 语法,我一直无法找到令人满意的解析方式。确切的构造是...
IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF
... Else 和 Elseif 是可选的。
到目前为止我所拥有的是:`syntax Statement = r:ReturnClause => r |
i:IfClause => i |
ei:ElseifClause => ei |
e:ElseClause => e |
结束:结束子句 => 结束 |
v:表达式 => v ;
语法 IfClause = If name:Identifier operator:Operator Then statement:Statement => If[name, operator, Then[statement]];
语法 ElseifClause = Elseif name:Identifier operator:Operator Then statement:Statement => ElseIf[name, operator, Then[statement]];
语法 ElseClause = Else statement:Statement => Else[statement];
语法 EndClause = Endif; `
但是,'Then' 和 'Else' 之后的语句不够贪心,只捕获解析树中的第一条语句。
有没有人尝试使用 MGrammar 实现 If 语句的解析或有任何建议?