OutOfMemoryException
От: Аноним  
Дата: 21.02.12 10:57
Оценка:
Нижеследующий код у меня вызвал OutOfMemoryException


    [PegGrammar(Options = EmitDebugSources,start,
    grammar
    {
        Letter                          = ([Lu, Ll, Lt, Lm, Lo, Nl] / '_' / '$');
        Digit                           = ['0'..'9'];
        IdentStart                      = Letter;
        IdentBody                       = Letter / Digit;
        Ident                           = IdentStart IdentBody*;
        JustText:ParamStringPart        = (!':'[Any])*;
        Param:ParamStringPart           = (':' Ident ':');
        //StartPart:StringThenParam       = JustText? Param;
        start:list[ParamStringPart]     = (Param / JustText)*;
    }
    )]
  public class ParamStringParser
  {
      JustText(t:NToken):ParamStringPart
      {
          ParamStringPart.JustText(GetText(t))
      }
      
      Param(_:NToken,t:NToken,_:NToken):ParamStringPart
      {
          def text = GetText(t);
          ParamStringPart.Param(text,":" + text + ":");
      }
      
      start(lst:List[ParamStringPart]):list[ParamStringPart]
      {
          lst.NToList()
      }
  }
  
  
  public variant ParamStringPart
  {
      |JustText{text:string}
      |Param{value:string; raw:string}
  }

  def text = "select * from Employee e where e.FirstName = :fn: && e.LastName = :ln: order by Id";
  def parser = Nelution.Parsers.ParamStringParser();
  def pres = parser.Parse(text);


Что я сделал неправильно?
nemerle peg
Re: OutOfMemoryException
От: hardcase Пират http://nemerle.org
Дата: 21.02.12 11:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что я сделал неправильно?


Правила должны хоть что-то съедать из потока:
JustText:ParamStringPart        = (!':'[Any])+;
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: OutOfMemoryException
От: Аноним  
Дата: 21.02.12 12:15
Оценка:
H>Правила должны хоть что-то съедать из потока:
H>
H>JustText:ParamStringPart        = (!':'[Any])+;
H>

Да, так все работает. Спасибо за подсказку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.