Информация об изменениях

Сообщение Re[10]: [Nitra] Парсинг языков базирующихся на отсупах от 02.10.2014 20:12

Изменено 02.10.2014 21:16 VladD2

Здравствуйте, 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>>
Re[10]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, 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>>