1

hello2 つの構造 (ステートメントとfunブロック定義)のみを使用して、非常に素朴なインデントに敏感な言語を解析しようとしています。

hello
hello
fun
  hello
  hello
hello

そのために、Irony を使用して次の文法を作成しました。

public class NaiveIndent : Grammar
{
    public NaiveIndent()
        : base(true) // CaseSensitive
    {
        var myexp = ToTerm("hello");
        var fun = ToTerm("fun");

        var statementList = new NonTerminal("statementList");
        var statement = new NonTerminal("statement");
        var block = new NonTerminal("block");

        statementList.Rule = MakePlusRule(statementList, NewLineStar, statement);
        statement.Rule = (myexp | block) + NewLine;
        block.Rule = fun + NewLine + Indent + statementList + Dedent;

        Root = statementList;
        LanguageFlags = LanguageFlags.NewLineBeforeEOF;
    }
}

ただし、サンプルの解析はエラーで失敗します(4,3) Syntax error, expected: INDENT

誰かが私が間違っていることを特定できますか?

4

1 に答える 1

0

彼の Python サンプルを確認しましたか?

http://irony.codeplex.com/SourceControl/latest#Irony.Samples/MiniPython/MiniPython.cs

于 2013-11-03T17:25:14.130 に答える