Pull to refresh
542
-7.2

Довожу здравый смысл до абсурда

Send message

Давайте бояться вместе, я тоже ровно на этом пути (см мои последние статьи) :)

Здравствуйте, коллега :)

Не очень хорошо вы искали статьи, даже на хабре статей сильно больше того, что вы процитировали.

Зря вы акцентируете внимание на C++ вместо непосредственно вашего яызка. Гораздо интереснее было бы посмотреть на примеры программ на вашем языке, нежели на

    char* data = new char[85];

    memcpy(data, "{a = 11004; b = 10087; while(0 < b)  {c = a - (a / b * b); a = b; b = c;} print(a);}", 85);

    compiler comp = compiler(data, 85);

На самом деле, из вашей статьи совершенно непонятно, как работает, например, парсер. Ваша грамматика имеет неоднозначности, и (с первого взгляда) я не понимаю, как вы расставляете приоритеты у операций...

Типизация выражений, таблицы символов, оптимизация кода - всё прошло мимо :(

Но я-то руками умею, а автоматически нет ;)

Спасибо за ссылку!

Да господь с вами :)

Я вообще никогда не задумывался, как компиляторы работают, и уж тем более оптимизирующие. Вот заинтересовался, посмотрим, куда приведёт. Спасибо за ссылку, изучу на досуге.

Тут недавно кто-то выкладывал цикл статей по теории оптимизирующих компиляторов

Ссылку в студию!

Именно в этом и вопрос. Насколько сложно автоматически привести код к классической хвостовой?

Да что вы начали-то. Синее платье, очевидно же :)

Ну питон-то в следующей статье закончится, так что джамп можно сделать

А мне что, браться за все абсурдные задачи? :)

Вам не кажется, что это оффтопик в контексте написания компилятора на пятьсот строк кода?

Doom сумеете на АОНе запустить? :)

Мы ж тут, вроде, про компилирование и запуск произвольных программ говорим, а не про примитивный дешифратор.

Кстати, вопрос. Как считаете, код факториала, что я привёл в этой статье, это хвостовая рекурсия или нет?

Уточнение: есть задачи на написание кода, который не пользуется ОЗУ. И там пока всё без затей: пишут на ассемблере.

Программирование на ассемблере не означает, что ОЗУ не используется. Не сильно много я видел программ на ассемблере, котороые не пользовались бы стеком...

Руками или сразу в компиляторе? Если сразу в компиляторе, то это тема для отдельного разговора, см. предпоследний раздел оглавления.

Ваша задача не имеет решения в общем случае.

Нет, вы неправильно поняли. Я делаю компилятор, который выдает ассемблерный код, так что скорость работы питона влияет только на время компиляции.

Так, я не зря пропал со статьями на некоторое время :)

Я слегка упоролся, но всё же написал полностью рабочий парсер, который, к тому же, позволит мне слегка переделать синтаксис, поскольку тот синтаксис, который я хотел изначально, оказался не LR(1), и уж тем более не LALR(1). Полный парсер чуть больше сотни строк кода оказался.

https://github.com/ssloy/tinycompiler/blob/6f9752566ac4f6f1e62dfe47598081dc8b4394d8/earley.py

Надо его ещё отполировать-подрихтовать, и можно будет снова текст писать с описанием всего этого добра. Спасибо за толчок!

Я вдохновился вашим шарпом, и накатал простейший лексер, который подключается вместо лексера sly. Как делать парсер - пока ещё не знаю.

https://github.com/ssloy/tinycompiler/blob/lexer/mylexer.py

Разбор выражений - это только часть парсера. Действительно, надо хорошо подумать, как делать парсер.

Information

Rating
Does not participate
Registered
Activity