Re[10]: [Nitra] Парсинг языков базирующихся на отсупах
От: WolfHound  
Дата: 02.10.14 20:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Про левую рекурсию не забыл? Она тут не стрельнет?

Не вижу в каком месте она может стрельнуть.

VD>Про NewLine не понял. Наверно ты имеешь в виду требование начала новой вложенности.

Нет. NewLine это перевод строки.
IndentInc начало новой вложенности.
Indent текущий отступ.
IndentDec конец.

VD>Там еще вопросы есть. Например, в некоторых языках можно искусственно игнорировать конец строки и рассматривать следующую строку как продолжение предыдущей. Например, в Васике это "_" в конце строки. А в Питоне, вроде бы, "\". Причем она даже в строках действует.

Пробельное правило просто не должно содержать перевод строки.
Но должно содержать:
"_" NewLine

И всё.

VD>Так что твоя грамматика не верна. В прочем, это детали. Может и прокатить.

А так?
syntax Block
{
  | MultyLine = ":" NewLine IndentInc (Indent Statement)+ IndentDec;
  | OneLine   = ":" OneLineStatement NewLine;
}

syntax Statement
{
  | If               = "if" Expression Block else Block;
  | While            = "while" Expression Block;
  | OneLineStatement = OneLineStatement NewLine;
}

syntax OneLineStatement
{
  | Return  = "return " Expression;
}
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Отредактировано 02.10.2014 21:16 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.