Подтвердить что ты не робот

Учебники для написания парсера с Javascript

Я видел пару языков (а именно CoffeeScript и LessCSS), которые построены на Javascript.

Есть ли учебники для написания языков/парсеров с Javascript?

4b9b3361

Ответ 1

Jison смоделирован на генераторе парсера GNU Bison. Он берет грамматику языка в формате Bison или JSON и выводит парсер Javascript для языка. Если вы хотите сделать переводчика, основанного на другом известном языке, там, возможно, есть грамматика Bison, где-то вы можете настроить для Jison. Я нашел это очень простым, чтобы начать работу с DSL с нуля.

Ответ 2

Почему вы считаете, что фундаментальные концепции реализации языков "на JavaScript" в корне зависят от JavaScript? В основном, может быть применен только язык программирования и стандартные подходы, основанные на компиляторах; один "просто" компилируется в JavaScript вместо машинных инструкций.

Вот учебник по написанию компиляторов с использованием очень простых методов метакомпиляции. Это связано с тем, что JavaScript является исходным, но он не привязан к JavaScript. Этот учебник основан на статье Валь Шорре "MetaII", своего рода метакомпиляторе... от 1964 года (да, вы это правильно поняли). Я научился строить свой первый компилятор из этой статьи (но не с помощью JavaScript:), и это по-прежнему ценный метод:

Учебник по компилятору Meta II, ориентированный на JavaScript

Если вам нужно что-то более непосредственное, рассмотрите письменный рекурсивный парсер спуска вручную.. После того, как вы написали несколько из них, вы по достоинству оцените, какой бит гения MetaII.

Ответ 3

Я бы начал с изучения других языков, которые компилируются в javascript и видят, что они делают. Вот список: https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

См. список генераторов парсеров в нижней части этой страницы, которые делают вещи немного проще, например, jison и peg.js.

При написании альтернативного языка, который компилируется в javascript, существуют определенные ограничения или препятствия, поскольку javascript не был разработан как "байт-код" или среда выполнения для других языков. Нет статических типов или системы классов, например, как в java и С#. Если вы просто делаете небольшое изменение, чтобы исправить некоторые проблемы с javascript, такие как coffeescript и другие, перечисленные в верхней части страницы по этой ссылке, такие вещи не являются проблемой, но тогда большая проблема заключается в том, почему не просто способствовать coffeescript или аналогичные языки.