Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Ясно. Повязло.
На самом деле не очень.
Он проявляется только на весьма специфических грамматиках.
И грамматика найтры одна из них.
В данном случае козлит вот это правило.
| 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>>