Re[3]: [Nitra] Первые впечатления и вопросы
От: WolfHound  
Дата: 13.10.14 00:02
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>Ясно. Повязло.

На самом деле не очень.
Он проявляется только на весьма специфических грамматиках.
И грамматика найтры одна из них.
В данном случае козлит вот это правило.
    | Sequence                        = LeftRule=RuleExpression ^ 10 RightRules=(sm RuleExpression ^ 10)+

Это н-арный оператор пробел.

Кстати где ты этот синтаксис взял?
[interrupt_protection]

Найтра такое не умеет.
Думатель обе скобки удалил.

Найтра использует регексные операторы.
? для опционального правила.
И вот такие варианты для циклов:
  syntax RepeatQuantifier
  {
    Bounds() : RepeatBounds;

    | ZeroOrMany = "*"                                { override Bounds = (0,               None());                }
    | OneOrMany  = "+"                                { override Bounds = (1,               None());                }
    | UpperBound = "{" sm        "," sm Number sm "}" { override Bounds = (0,               Some(Number.Value()));  }
    | LowerBound = "{" sm Number ","           sm "}" { override Bounds = (Number.Value(),  None());                }
    | FullBounds = "{" sm Number "," sm Number sm "}" { override Bounds = (Number1.Value(), Some(Number2.Value())); }
    | Exact      = "{" sm Number               sm "}" { override Bounds { def x = Number.Value(); (x, Some(x)); }   }
  }


ДА>А по 4 вопросу почему получается 64 одинаковых варианта?

Я же говорю комбинаторный взрыв. Думатель придумал 64 способа разобрать эту строку.
Посмотри АСТ в визуализаторе.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.