Я пишу переводчика. Я сделал это раньше, но никогда не пробовал один, который может работать с выражениями, такими как 3 + 4 * 2/(1 − 5)^2^3
.Переводчик с однорежимной виртуальной машиной - можно оценить всю математику. выражения?
У меня нет проблем с процессом разбора, на самом деле речь идет о моей виртуальной машине, которая затем выполняет код.
Моя цель была быстрый переводчик, и поэтому я не решил использовать стек на основе VM, где вам потребуется более одной инструкции для умножения, например (толчок, толчок, MUL)
«сборки "код VM, порожденного анализатором выглядит следующим образом:
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
(результат я s правильно)
- Как вы можете видеть: Каждая инструкция не принимает ни одного, ни два аргумента. Существует регистр результатов, который содержит результат последней команды. Вот и все.
Может ли VM с языком этой структуры и только одним регистром вычислять каждое математическое выражение, например, Python или PHP?
Если это невозможно без стека, я начну прямо сейчас!
Да, теперь у меня и моего переводчика есть проблема. – mersion
Считаете ли вы, что это возможно с помощью двухрежимной машины? Итак, у вас есть результат последних * двух * операций? – mersion
(1 + 2) * (3 + 4) + (5 + 6) * (7 * 8) –