如何使用讽刺处理缩进敏感语言

本文关键字:语言 缩进 处理 何使用 讽刺 | 更新日期: 2023-09-27 18:33:57

我正在尝试解析一种非常幼稚的缩进敏感语言,只有两个结构(hello语句,fun块定义)。

hello
hello
fun
  hello
  hello
hello

为了做到这一点,我用讽刺编写了以下语法:

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

谁能指出我做错了什么?

如何使用讽刺处理缩进敏感语言

你检查过他的Python示例吗?

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