Сообщение Re[9]: [Nitra] Парсинг языков базирующихся на отсупах от 02.10.2014 19:56
Изменено 03.10.2014 4:00 VladD2
Здравствуйте, WolfHound, Вы писали:
WH>Проблем не будет. Ибо в почти любой грамматике множество правил с одного места начинаются.
Про левую рекурсию не забыл? Она тут не стрельнет?
WH>Должно всё работать. Если пройтись по тексту и сказать где у нас NewLine, IndentInc, Indent и IndentDec то с помощью этой грамматики можно будет спокойно парсить питон.
Про NewLine не понял. Наверно ты имеешь в виду требование начала новой вложенности.
Там еще вопросы есть. Например, в некоторых языках можно искусственно игнорировать конец строки и рассматривать следующую строку как продолжение предыдущей. Например, в Васике это "_" в конце строки. А в Питоне, вроде бы, "\". Причем она даже в строках действует.
Думаю, что нужен знаток Питона, чтобы точно сказать можно ли разбирать отступы в Питоне с помощью препроцессора, а не в процессе парсинга. Я в этом не уверен.
WH>
Там прикол в том, что код может быть написан так:
а можно так:
Так что твоя грамматика не верна. В прочем, это детали. Может и прокатить.
Нужно кого-то секущего в Питоне, или самим учить правила их переноса строк. Для чего нужна хотя бы внятная ссылка.
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>Проблем не будет. Ибо в почти любой грамматике множество правил с одного места начинаются.
Про левую рекурсию не забыл? Она тут не стрельнет?
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()
Так что твоя грамматика не верна. В прочем, это детали. Может и прокатить.
Нужно кого-то секущего в Питоне, или самим учить правила их переноса строк. Для чего нужна хотя бы внятная ссылка.