Comments 28
Жаль не на питоне…
И чем же bison/flex лучше нежели docs.python.org/library/ast.html?
Мне сложно ответить на ваш вопрос, так как я никогда не использовал указанный вами инструмент.
Но могу аргументировать свой выбор: в мой код встраиваются функции из написанной на C библиотеки (http://goo.gl/0Kx5B).
Но могу аргументировать свой выбор: в мой код встраиваются функции из написанной на C библиотеки (http://goo.gl/0Kx5B).
Python из коробки решает и эту проблему при помощи docs.python.org/library/ctypes.html
Как же вы надоели, злобные потребители готового! Идите сюда pypi.python.org/pypi/ и разводите свои холивары, а мне нужны пимеры bison+flex с форматированием на отступах.
Ну что вы, в самом деле. Может человек просто не в курсе был, что такие библиотеки существуют. А то сразу, «холивар, холивар»…
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
В продукции class_arg у вас баги (допускает например следующее: ID ID ID...,, ,).
Тут, на самом деле, можно было обойтись регулярным выражением, но тогда не получится верно определить номер строки — мы не сможем узнать количество съеденных регэкспом строк (или сможем? если да — пишите способ).
YY_USER_ACTION
И определить его, например, так:
(yylloc есть в справке bison'а)
static void updateLocation()
{
// Начало токена
yylloc.first_line = line_number;
yylloc.first_column = column_number;
// Новое смещение
for( int i = 0; i < yyleng; i++ ) {
if( yytext[i] == '\n' ) {
line_number++;
column_number = 1;
} else {
column_number++;
}
}
// Конец токена
yylloc.last_line = line_number;
yylloc.last_column = column_number;
printf( "%s", yytext );
}
(yylloc есть в справке bison'а)
И мне ваш способ обработки вложенности не нравится — вам отдельный стек потребовался, а можно было средствами бизона сделать. Для этого достаточно было из лексера генерировать токены INCREASE_INDENT, DECREASE_INDENT в начале строк, и вписать их в грамматику.
Поправьте, если не прав, но разве из вашего мини-графа(где sign: PLUS | MULT) 3 + 4 * 15 не следует то, что он сначала прибавит 3 и 4, и затем сумму умножит на 15?
Да, было бы скучно в мире без языков с инфиксным синтаксисом…
Любителям по-разбирать кастомные грамматики на Python стоит посмотреть на PLY by David Beazley
Sign up to leave a comment.
Парсим Python код с помощью Flex и Bison