質問

MGrammar仕様を構築して、特定の情報ビットを探す擬似コードを解析しています。 1つの重要な要素を除き、ほとんどの仕様が機能しています。

擬似コードはif-then-else構文をサポートしており、構文解析の満足できる方法を見つけることができませんでした。正確な構成は...

IF式演算子式THEN
 Statement1
 Statement2
 ステートメント
ELSEIF式演算子式THEN
 Statement1
 Statement2
 ステートメント
ELSE
 Statement1
 Statement2
 ステートメント
ENDIF

... ElseおよびElseifはオプションです。

これまでに私が持っているのは: `構文ステートメント= r:ReturnClause => r |
i:IfClause => i |
ei:ElseifClause => ei |
e:ElseClause => e |
end:EndClause =>終了|
v:Expression => 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ステートメントの解析を実装しようとした人や提案がありますか?

役に立ちましたか?

解決

codeplexのアーキタイププロジェクトで(ほぼ)完全なC#4.0文法を見つけることができます。 Dan Vanderboomは、「Archetype」という名前の新しい言語コードの準備でそれを書きました。

役立つかもしれません: http://archetype.codeplex.com/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top