0

Я быстро написал интерпретатор для какого-то экспериментального языка программирования, с которым я столкнулся, в PHP (да, в PHP). Сам язык не имеет ничего особенного, я просто хотел попробовать.Иерархия заявлений в языках программирования

Я получил основные вещи, работающие (Hello World, ввод данных, манипуляция строками, арифметика), но я застрял в управлении блоками и сгруппированными утверждениями.

Что я имею в виду: PHP и большинство других языков позволяют вам делать это: ((2+2)*(8+2)+2), конечно, не только с математическими вычислениями.

Моя структура программы в данный момент состоит из многомерного массива, построенного так:

ID => Type (Identifier, String, Int, Newline, EOF, Comma, ...) 
     Contents (If identifier, int or string) 
  • Как я мог позволить заявления должны быть выполнены в определенном порядке, как и в на примере PHP выше?

ответ

4

Предлагаю прочитать вводную статью или книгу о написании компиляторов/переводчиков. В Интернете и в библиотеке есть множество отличных книг и статей по теме. Я бы дал ссылки, но я не знаю, каков ваш фон.

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

 + 
    /\ 
     * 2 
    / \ 
    +  + 
/\ /\ 
2 2 8 2 

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

+0

Если он просто хочет оценить выражения, нет необходимости явно строить дерево. То же самое, если он использует метод рекурсивного спуска для более полного языка - не требуется явное дерево. – 2010-03-30 09:15:13

+0

@Neil: да, книга Дракона называет это "синтаксически направленным переводом" –

0

Во-первых, вам необходимо дать вашему языку некоторую идею о приоритете оператора. Затем вы даете (оператор очень низкий приоритет, а оператор) очень высокий. Но эта тема слишком сложна для ответа SO - вам нужно прочитать способы оценки выражений. Взгляните на компилятор SO & ресурсы переводчика на Learning to write a compiler

Смежные вопросы