PEG: не расширяется правило
От: catbert  
Дата: 31.03.12 16:59
Оценка:
Написал такую PEG-грамматику:

  [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). В чем дело?
Re: PEG: не расширяется правило
От: hardcase Пират http://nemerle.org
Дата: 31.03.12 17:05
Оценка:
Здравствуйте, catbert, Вы писали:

C>Парсер ничего не парсит (возвращает None). В чем дело?


В том что функционал который ты пытаешься использовать в этом PEG-е не реализован.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: PEG: не расширяется правило
От: catbert  
Дата: 31.03.12 17:06
Оценка:
Здравствуйте, catbert, Вы писали:

C>Написал такую PEG-грамматику:


Использую парсер из NemerleSetup-net-4.0-v1.1.660.0-nightly.msi
Re[2]: PEG: не расширяется правило
От: catbert  
Дата: 31.03.12 17:19
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В том что функционал который ты пытаешься использовать в этом PEG-е не реализован.


А в каком-то другом реализован?
Re: PEG: не расширяется правило
От: WolfHound  
Дата: 31.03.12 17:24
Оценка:
Здравствуйте, catbert, Вы писали:

C>Парсер ничего не парсит (возвращает None). В чем дело?

Не ясно, почему оно вообще компилируется.
Но разбираться мне лень.
А то, что ты хочешь, реализовано в совсем другом проекте.
https://github.com/rampelstinskin/ParserGenerator
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: PEG: не расширяется правило
От: catbert  
Дата: 31.03.12 17:47
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А то, что ты хочешь, реализовано в совсем другом проекте.

WH>https://github.com/rampelstinskin/ParserGenerator

Ясно. Насколько оно реализовано? На данный момент в самом свежем снапшоте, Test.exe зацикливается и ничего не выводит. Так должно быть?
Re[3]: PEG: не расширяется правило
От: WolfHound  
Дата: 31.03.12 18:51
Оценка:
Здравствуйте, catbert, Вы писали:

C>Ясно. Насколько оно реализовано?

Еще пилить и пилить.

C>На данный момент в самом свежем снапшоте, Test.exe зацикливается и ничего не выводит. Так должно быть?

Нет. У меня работает.
А в каком месте зацикливается?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: PEG: не расширяется правило
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.03.12 18:53
Оценка:
Здравствуйте, catbert, Вы писали:

C>Написал такую PEG-грамматику:...

C>Парсер ничего не парсит (возвращает None). В чем дело?

Сила связывания в PegGrammar реализована не была. Документация в данном случае врет. Надо описывать операторы "по старинке".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.