Статья демонстрирует технику создания парсеров с использованием наследования грамматик. Наследование позволяет описывать новые грамматики на основе уже существующих путем добавления новых правил или переопределения унаследованных, что существенно упрощает реализацию новых парсеров. Изменения в базовой грамматике автоматически становятся доступными во всех порожденных грамматиках. Основная область применения такой техники — поддержка нескольких диалектов или версий языков.
Читать полностью »
Метка «compiler»
Наследование грамматик в Sprache (или еще один настраиваемый калькулятор выражений для .NET)
2014-06-29 в 19:33, admin, рубрики: .net, calculator, compiler, выражения, калькулятор, Компиляторы, метки: .net, c++, calculator, compiler, выражения, калькулятор, компиляторыSweet.js: Синтаксические расширения для JavaScript
2014-01-27 в 10:40, admin, рубрики: compiler, javascript, macros, Компиляторы, Программирование, метки: compiler, javascript, macrosДавайте попробуем посмотреть на Sweet.js, компилятор, который реализует гигиенические макросы для JavaScript.
Работает он довольно просто — вы определяете набор шаблонов, по которым выполняется поиск по синтаксическому дереву. При совпадении макрос получает кусок дерева, который ему нужен и тело макроса определяет как этот кусок дерева должен трансформироваться. Далее результат встраивается обратно в дерево и процедура продолжается с того самого места.
Sweet.js оперирует своим собственным форматом синтаксического дерева, почти на уровне токенов, с минимальной структурой. С одной стороны это делает возможным определять довольно экзотические синтаксисы для своих макросов, с другой — делает написание макросов несколько сложнее, как если бы они были определены над стандартным AST JavaScript.
Assembler для Brainfuck
2013-06-09 в 12:54, admin, рубрики: Brainfuck, compiler, ruby, translator, ассемблер, брейнфак, компилятор, компиляция, ненормальное программирование, Песочница, руби, трансляция, метки: brainfuck, compiler, ruby, translator, ассемблер, брейнфак, компилятор, компиляция, руби, трансляция Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать полностью »
Saltarelle: open source C# — JavaScript компилятор
2012-09-06 в 16:07, admin, рубрики: compiler, javascript, open source, Веб-разработка, метки: c++, compiler, javascript, open source, script Добрый день. Наша команда (без ссылок, это не важно) решила попробовать новый инструмент-компилятор Saltarelle в разработке своего проекта и, так как Хабр часто нам помогал полезной информацией, решили внести и свой скромный вклад в его копилку знаний и перевести запись в блоге разработчика.
Читать полностью »