0

我正在建立一个 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 语句的解析或有任何建议?

4

1 回答 1

0

您可以在 codeplex 上的原型项目中找到(几乎)完整的 C# 4.0 语法。Dan Vanderboom 编写它是为了准备他的名为“Archetype”的新语言代码。

也许这有帮助:http ://archetype.codeplex.com/

于 2010-06-02T09:12:50.723 回答