Не очень хорошо вы искали статьи, даже на хабре статей сильно больше того, что вы процитировали.
Зря вы акцентируете внимание на 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);
На самом деле, из вашей статьи совершенно непонятно, как работает, например, парсер. Ваша грамматика имеет неоднозначности, и (с первого взгляда) я не понимаю, как вы расставляете приоритеты у операций...
Типизация выражений, таблицы символов, оптимизация кода - всё прошло мимо :(
Я вообще никогда не задумывался, как компиляторы работают, и уж тем более оптимизирующие. Вот заинтересовался, посмотрим, куда приведёт. Спасибо за ссылку, изучу на досуге.
Уточнение: есть задачи на написание кода, который не пользуется ОЗУ. И там пока всё без затей: пишут на ассемблере.
Программирование на ассемблере не означает, что ОЗУ не используется. Не сильно много я видел программ на ассемблере, котороые не пользовались бы стеком...
Так, я не зря пропал со статьями на некоторое время :)
Я слегка упоролся, но всё же написал полностью рабочий парсер, который, к тому же, позволит мне слегка переделать синтаксис, поскольку тот синтаксис, который я хотел изначально, оказался не LR(1), и уж тем более не LALR(1). Полный парсер чуть больше сотни строк кода оказался.
Давайте бояться вместе, я тоже ровно на этом пути (см мои последние статьи) :)
Здравствуйте, коллега :)
Не очень хорошо вы искали статьи, даже на хабре статей сильно больше того, что вы процитировали.
Зря вы акцентируете внимание на C++ вместо непосредственно вашего яызка. Гораздо интереснее было бы посмотреть на примеры программ на вашем языке, нежели на
На самом деле, из вашей статьи совершенно непонятно, как работает, например, парсер. Ваша грамматика имеет неоднозначности, и (с первого взгляда) я не понимаю, как вы расставляете приоритеты у операций...
Типизация выражений, таблицы символов, оптимизация кода - всё прошло мимо :(
Но я-то руками умею, а автоматически нет ;)
Спасибо за ссылку!
Да господь с вами :)
Я вообще никогда не задумывался, как компиляторы работают, и уж тем более оптимизирующие. Вот заинтересовался, посмотрим, куда приведёт. Спасибо за ссылку, изучу на досуге.
https://habr.com/ru/articles/735152/
оно?
Ссылку в студию!
Именно в этом и вопрос. Насколько сложно автоматически привести код к классической хвостовой?
Да что вы начали-то. Синее платье, очевидно же :)
Ну питон-то в следующей статье закончится, так что джамп можно сделать
А мне что, браться за все абсурдные задачи? :)
Вам не кажется, что это оффтопик в контексте написания компилятора на пятьсот строк кода?
Doom сумеете на АОНе запустить? :)
Мы ж тут, вроде, про компилирование и запуск произвольных программ говорим, а не про примитивный дешифратор.
Кстати, вопрос. Как считаете, код факториала, что я привёл в этой статье, это хвостовая рекурсия или нет?
Программирование на ассемблере не означает, что ОЗУ не используется. Не сильно много я видел программ на ассемблере, котороые не пользовались бы стеком...
Руками или сразу в компиляторе? Если сразу в компиляторе, то это тема для отдельного разговора, см. предпоследний раздел оглавления.
Ваша задача не имеет решения в общем случае.
Нет, вы неправильно поняли. Я делаю компилятор, который выдает ассемблерный код, так что скорость работы питона влияет только на время компиляции.
Так, я не зря пропал со статьями на некоторое время :)
Я слегка упоролся, но всё же написал полностью рабочий парсер, который, к тому же, позволит мне слегка переделать синтаксис, поскольку тот синтаксис, который я хотел изначально, оказался не LR(1), и уж тем более не LALR(1). Полный парсер чуть больше сотни строк кода оказался.
https://github.com/ssloy/tinycompiler/blob/6f9752566ac4f6f1e62dfe47598081dc8b4394d8/earley.py
Надо его ещё отполировать-подрихтовать, и можно будет снова текст писать с описанием всего этого добра. Спасибо за толчок!
Я вдохновился вашим шарпом, и накатал простейший лексер, который подключается вместо лексера sly. Как делать парсер - пока ещё не знаю.
https://github.com/ssloy/tinycompiler/blob/lexer/mylexer.py
Разбор выражений - это только часть парсера. Действительно, надо хорошо подумать, как делать парсер.