Является ли данная Peg грамматика леворекурсивной
От: Аноним  
Дата: 20.10.13 11:10
Оценка:
pattern:VPattern; //ExpandableRule

textPattern is pattern = "text"s;
attributePattern is pattern = "attribute"S identifier S "{"s textPattern "}"s;
elementPattern is pattern = "element"S identifier S "{"s pattern "}"s;
groupPattern is pattern = pattern (S ','S pattern)+;
interlivePattern is pattern = pattern (S '&'S pattern)+;
choicePattern is pattern = pattern (S '|'S pattern)+;
nemerle peggrammar
Re: Является ли данная Peg грамматика леворекурсивной
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.13 12:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А> pattern:VPattern; //ExpandableRule


А> textPattern is pattern = "text"s;

А> attributePattern is pattern = "attribute"S identifier S "{"s textPattern "}"s;
А> elementPattern is pattern = "element"S identifier S "{"s pattern "}"s;
А> groupPattern is pattern = pattern (S ','S pattern)+;
А> interlivePattern is pattern = pattern (S '&'S pattern)+;
А> choicePattern is pattern = pattern (S '|'S pattern)+;

Это не PEG. Это какая-то ранняя версия грамматики N2/Nitra. Это, несомненно, левая рекурсия. В принципе в таком виде она допустима, но похоже что ее автор что-то понимает не так.

Nitra поддерживает прямую левую рекурсию для расширяемых правил. Именно таким образом в Nitra описываются операторы. Но вместа циклов (в правой части правил) нужно применять так же рекурсию и приоритеты операторов. Тогда будет появляться требуемая иерархия выражений. То как одни выражения будут вкладываться в другие определяется приоритетами.

Вот так эту грамматику можно записать на Nitra (если я правильно уловил суть):
syntax Pattern;
{ 
  | TextPattern      = "text";
  | AttributePattern = "attribute" Identifier "{" Pattern "}";
  | ElementPattern   = "element" Identifier "{" Pattern "}";
  | GroupPattern     = Pattern ',' Pattern precedence 10;
  | ChoicePattern    = Pattern '|' Pattern precedence 20;
  | InterlivePattern = Pattern '&' Pattern precedence 30;
}


PS

Пробельные правила теперь вручную расставлять не надо. Они ставятся автоматически.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Является ли данная Peg грамматика леворекурсивной
От: Аноним  
Дата: 22.10.13 15:46
Оценка:
VD>Это не PEG. Это какая-то ранняя версия грамматики N2/Nitra. Это, несомненно, левая рекурсия. В принципе в таком виде она допустима, но похоже что ее автор что-то понимает не так.
У меня нет доступа ни к N2 ни к Nitra. Пользуюсь старым добрым макросом Peg. Пытаюсь реализовать парсер для компактного синтаксиса Relax NG
Re[3]: Является ли данная Peg грамматика леворекурсивной
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.13 17:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня нет доступа ни к N2 ни к Nitra. Пользуюсь старым добрым макросом Peg. Пытаюсь реализовать парсер для компактного синтаксиса Relax NG


Постучись на мой скайп (vc.rsdn.ru) дам тебе предварительную версию Nitra.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Является ли данная Peg грамматика леворекурсивной
От: Аноним  
Дата: 22.10.13 18:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Аноним, Вы писали:


А>>У меня нет доступа ни к N2 ни к Nitra. Пользуюсь старым добрым макросом Peg. Пытаюсь реализовать парсер для компактного синтаксиса Relax NG


VD>Постучись на мой скайп (vc.rsdn.ru) дам тебе предварительную версию Nitra.


А публичный когда?
Re[5]: Является ли данная Peg грамматика леворекурсивной
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.13 20:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А публичный когда?


Как убедимся, что от глюков избавились.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Является ли данная Peg грамматика леворекурсивной
От: Аноним  
Дата: 22.10.13 20:39
Оценка:
VD>Постучись на мой скайп (vc.rsdn.ru) дам тебе предварительную версию Nitra.
Огромное спасибо. Даже и не мечтал о таком... Обязательно воспользуюсь предложением!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.