Pull to refresh

Comments 28

Боюсь быть КО, но «The main project languages are C and C++» :)
UFO just landed and posted this here
Мне сложно ответить на ваш вопрос, так как я никогда не использовал указанный вами инструмент.
Но могу аргументировать свой выбор: в мой код встраиваются функции из написанной на C библиотеки (http://goo.gl/0Kx5B).
Как же вы надоели, злобные потребители готового! Идите сюда pypi.python.org/pypi/ и разводите свои холивары, а мне нужны пимеры bison+flex с форматированием на отступах.
Ну что вы, в самом деле. Может человек просто не в курсе был, что такие библиотеки существуют. А то сразу, «холивар, холивар»…
UFO just landed and posted this here
Опять-25! До C++ тоже были объектные обертки, до jQuery js-фреймворки, до node.js серверный javascript, до MongoDB документарные базы данных, до Apple наладонники с тачскрином и GSM-модулем, до Феррари спортивные автомобили, до Теории относительности теории пространства и времени… Продолжать?
UFO just landed and posted this here
… к слову для питона полно парсеров...

По-моему, здесь дана достаточно узкая тема, чтобы ее не превращать в холивар на тему изобретения велосипедов.
UFO just landed and posted this here
Тогда, почтеннейше прошу простить! Спасибо за ссылку )
UFO just landed and posted this here
UFO just landed and posted this here
Так же не интересно) Проект родился в недрах вуза и решал скорее образовательную задачу нежели привносил чтото сильно новое. Так что результат это багаж знаний который человек получил в ходе работы. Но заказчику этой фичи я обязательно ткну носом в pycallgraph, спасибо =)
UFO just landed and posted this here
В продукции class_arg у вас баги (допускает например следующее: ID ID ID...,, ,).
Тут, на самом деле, можно было обойтись регулярным выражением, но тогда не получится верно определить номер строки — мы не сможем узнать количество съеденных регэкспом строк (или сможем? если да — пишите способ).

YY_USER_ACTION
И определить его, например, так:
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?
Да, в итоге мы получим (3 + 4) * 15 = 105
> sign: PLUS | MULT
В данной грамматике + и * имеют одинаковый приоритет.
Вы правы, так и есть. Чтобы задать привычный приоритет выполнения операций умножения и сложения, надо использовать команды бизона %left или %right.
Да, было бы скучно в мире без языков с инфиксным синтаксисом…
Sign up to leave a comment.

Articles