Как бороться с чувствительным к отступам языком с помощью Irony?
Я пытаюсь разобрать очень наивный чувствительный к отступам язык только с двумя конструкциями (hello
заявление и 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
Может ли кто-нибудь точно определить, что я делаю не так?
1 ответ
Вы проверили его образец Python?