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

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

Изменено 03.10.2014 4:00 VladD2

Здравствуйте, WolfHound, Вы писали:

WH>Проблем не будет. Ибо в почти любой грамматике множество правил с одного места начинаются.


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

WH>Должно всё работать. Если пройтись по тексту и сказать где у нас NewLine, IndentInc, Indent и IndentDec то с помощью этой грамматики можно будет спокойно парсить питон.


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

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

Думаю, что нужен знаток Питона, чтобы точно сказать можно ли разбирать отступы в Питоне с помощью препроцессора, а не в процессе парсинга. Я в этом не уверен.

WH>
WH>  syntax Block = ":" NewLine IndentInc (Indent Statement)+ IndentDec;

WH>  syntax Statement
WH>  {
WH>    | If      = "if" Expression Block else Block;
WH>    | While   = "while" Expression Block;
WH>    | Return  = "return " Expression NewLine;
WH>  }
WH>


Там прикол в том, что код может быть написан так:
if (a):
  foo()

а можно так:
if (a): foo()


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

Нужно кого-то секущего в Питоне, или самим учить правила их переноса строк. Для чего нужна хотя бы внятная ссылка.
Re[9]: [Nitra] Парсинг языков базирующихся на отсупах
Здравствуйте, WolfHound, Вы писали:

WH>Проблем не будет. Ибо в почти любой грамматике множество правил с одного места начинаются.


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

WH>Должно всё работать. Если пройтись по тексту и сказать где у нас NewLine, IndentInc, Indent и IndentDec то с помощью этой грамматики можно будет спокойно парсить питон.


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

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

Думаю, что нужен знаток Питона, чтобы точно сказать можно ли разбирать отступы в Питоне с помощью препроцессора, а не в процессе парсинга. Я в этом не уверен.

WH>
WH>  syntax Block = ":" NewLine IndentInc (Indent Statement)+ IndentDec;

WH>  syntax Statement
WH>  {
WH>    | If      = "if" Expression Block else Block;
WH>    | While   = "while" Expression Block;
WH>    | Return  = "return " Expression NewLine;
WH>  }
WH>


Там прикол в том, что код может быть написан так:
if (a):
  foo()

а можно так:
if (a): foo()


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

Нужно кого-то секущего в Питоне, или самим учить правила их переноса строк. Для чего нужна хотя бы внятная ссылка.