[PegGrammar( Options = EmitDebugSources, start,
grammar
{
s : void = ' '*;
letter = ['A'..'Z', 'a'..'z'] / '_';
digit = ['0'..'9'];
identifier is expr = letter+ (letter / digit)* s;
[Extends(expr)]
num is expr = digit + s;
parentheses is expr = '('s expr ')'s;
// postfix unary expressions
postfixInc is expr = expr : 30 "++"s;
postfixDec is expr = expr : 30 "--"s;
// prefix unary expressions
prefixInc is expr = "++"s expr : 30;
prefixDec is expr = "--"s expr : 30;
negation is expr = '-'s expr : 30;
// infix binary expressions
sum is expr = expr : 10 '+'s expr : 10;
sub is expr = expr : 10 '-'s expr : 10;
mul is expr = expr : 20 '*'s expr : 20;
div is expr = expr : 20 '/'s expr : 20;
[Extensible(lol)]
expr : Expr;
start : Expr = s expr ![Any];
})]
public class InterpreterParser
{
// обработчики...
}
}
Выдается куча варнингов вроде такого:
warning: N10003: method Interpreter.InterpreterParser.prefixDec(op : Nemerle.Peg.NToken, value : Interpreter.Expr) : Interpreter.Expr is not externally visible and has never been referenced
Парсер ничего не парсит (возвращает None). В чем дело?
Здравствуйте, catbert, Вы писали:
C>Парсер ничего не парсит (возвращает None). В чем дело?
Не ясно, почему оно вообще компилируется.
Но разбираться мне лень.
А то, что ты хочешь, реализовано в совсем другом проекте. https://github.com/rampelstinskin/ParserGenerator
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, catbert, Вы писали:
C>Ясно. Насколько оно реализовано?
Еще пилить и пилить.
C>На данный момент в самом свежем снапшоте, Test.exe зацикливается и ничего не выводит. Так должно быть?
Нет. У меня работает.
А в каком месте зацикливается?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн