Создание переводчика языка - PullRequest
3 голосов
/ 10 марта 2010

Я пытаюсь понять, как работает переводчик языка. Ребята, можете ли вы указать мне общие черты о том, как работает переводчик?

Я имею в виду, предположим, у меня есть несколько строк, написанных вот так

10  x = 200;
20  for r = x to 1000 step 1
25  z = r + 32;
30  print z;
40  next r;
50  end;

каков лучший способ создать интерпретатор, который мог бы запустить что-то подобное?

Наличие большой матрицы, содержащей все разрешенные функции, и поиск соответствия? Первая строка, например: это присвоение 200 переменной x, но это символы, которых не существует.

Если вы, ребята, можете дать мне направление ...

Спасибо за любую помощь.

Ответы [ 6 ]

3 голосов
/ 10 марта 2010

Создание компилятора - сложная тема (интерпретатор можно рассматривать как специальный компилятор).

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

Википедия предлагает http://mcs.une.edu.au/~comp319/

1 голос
/ 16 мая 2017

Я знаю, что это старая ветка, но большинство связанных вопросов помечены как дубликаты или закрыты. Итак, вот мои два цента.

Я удивлен, что никто еще не упомянул xtext . Он доступен как плагин Eclipse и плагин IntelliJ . Он предоставляет не только синтаксический анализатор, такой как ANTLR, но и весь конвейер (включая анализатор, компоновщик, средство проверки типов, компилятор), необходимый для DSL. Вы можете проверить его исходный код на Github, чтобы понять, как работает интерпретатор / компилятор.

1 голос
/ 19 декабря 2013

вы можете найти 'Gold Parsing System' с открытым исходным кодом по адресу http://goldparser.org.:)

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

1 голос
/ 10 марта 2010

Мне также интересно узнать больше об этом. Мне показался интересным парсер JavaScript Дугласа Крокфорда , хотя, насколько я понимаю, он использует метод, отличный от типичного для синтаксического анализа языков. Это не полная картина для интерпретации и компиляции, но я нашел полезным увидеть некоторую реальную реализацию синтаксического анализа и результирующую реструктуризацию кода.

1 голос
/ 10 марта 2010

Узнайте о таких инструментах, как lex / flex и yacc / bison . Это самые популярные инструменты для построения компиляторов в открытом мире программного обеспечения. Многие известные программы с открытым исходным кодом написаны с использованием их (в том числе PHP, gcc, doxygen). Вы найдете много бесплатных книг и учебных пособий. Они не только показывают, как использовать инструменты lex и yacc, но и объясняют общие идеи, лежащие в основе компиляторов.

1 голос
/ 10 марта 2010

Возможно, вы говорите о создании DSL. Вы можете найти это полезным (если у вас все в порядке с расходами в $$)

http://gilesbowkett.blogspot.com/2010/03/create-your-own-programming-language.html

...