Иерархия операторов в языках программирования - PullRequest
0 голосов
/ 30 марта 2010

Я быстро написал интерпретатор для какого-то экспериментального языка программирования, с которым я придумал, в 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 выше?

Ответы [ 2 ]

4 голосов
/ 30 марта 2010

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

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

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

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

0 голосов
/ 30 марта 2010

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

...