2009-09-17 112 views
0

我構建了一個MGrammar規範來解析一些尋找特定位信息的僞代碼。除了1個關鍵元素外,我大部分的規範都在工作。MGrammar用於解析IF語句

僞代碼支持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 |
end:EndClause => end |
v:Expression => v;

語法IfClause =如果名稱:標識符運算符:運算符然後語句:Statement =>如果[name,operator,Then [statement]];
語法ElseifClause = Elseif名稱:標識符運算符:運算符然後語句:Statement => ElseIf [name,operator,Then [statement]];
語法ElseClause =其他語句:Statement => Else [語句];
語法EndClause = Endif; `

但是,'Then'和'Else'之後的語句不夠貪婪,只能捕獲解析樹中的第一條語句。

有沒有人試圖實現使用MGrammar的If語句的解析或有任何建議?

+0

這仍然是當前? –

+0

由於截止日期的原因,我不得不放棄MGrammer方法,但如果有人有答案,這將很好地解決這個問題,因爲在將來的某些工作中,這樣做會很有幫助。 – Sam

回答

0

您可以在codeplex的原型項目中找到(幾乎)完整的C#4.0語法。 Dan Vanderboom在編寫他的新的語言代碼「Archetype」時寫下了它。

也許這有助於:http://archetype.codeplex.com/