Интерпретатор с однорегистрационной виртуальной машиной - можно оценить всю математику. выражения? - PullRequest
3 голосов
/ 21 мая 2010

Я пишу переводчик. Я делал это раньше, но никогда не пробовал такого, который мог бы работать с выражениями типа 3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3.

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

Моей целью был быстрый интерпретатор, и поэтому я решил не использовать виртуальную машину на основе стека, где для умножения потребуется более одной инструкции, например (push, push, mul)

Код «сборки» для виртуальной машины, сгенерированный синтаксическим анализатором, выглядит следующим образом:

3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3

становится

sub 1         5
pow result    2
pow result    3
div 2         result 
mul 4         result
add 3         result

(результат верный)

  • Как видите: каждая инструкция принимает аргументы no, one или two. Есть регистр результата, который содержит результат последней инструкции. И это все.

Может ли виртуальная машина с языком этой структуры и только одним регистром вычислять каждое математическое выражение, например, Python или PHP?

Если это невозможно без стека, я начну прямо сейчас!

1 Ответ

4 голосов
/ 21 мая 2010

Что вы делаете с (1 + 2) * (3 + 4) или любым другим, что потребует от вас расчета более одного промежуточного результата?

...