Как общие языки программирования анализируют инфиксные выражения? - PullRequest
0 голосов
/ 25 декабря 2018

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

" Алгоритм обработки инфиксной записи может быть сложным и дорогостоящим с точки зрения использования времени и пространства ".

Арифметическое выражение может быть записано в префиксной или постфиксной нотации без изменения сущности или вывода выражения.Я обеспокоен тем, что:

  1. Есть ли заметная разница с точки зрения пространства памяти и времени обработки при обработке выражения в инфиксной нотации по сравнению с префиксной или постфиксной нотацией?

  2. Как общие языки программирования обрабатывают инфиксные выражения?

    i.Обрабатывают ли они их напрямую, как они есть, или

    ii.Сначала они преобразуют их в нотацию постфикса / префикса перед их обработкой, и если да, то почему нельзя использовать эту функцию преобразования напрямую, чтобы позволить непосредственно запускать нотации постфикса и префикса?

PS: Я попытался запустить нотацию префикса / постфикса для простого арифметического выражения a + b в консоли JavaScript v8 google chrome, сначала назначив переменные a и b дляцелочисленные значения затем запускают их как ab + и + ab, и я в итоге получаю SyntaxError и ReferenceError соответственно.Мне было интересно, выполняет ли двигатель свое собственное преобразование (на уровне интерпретации) для выражения перед отображением результатов.

1 Ответ

0 голосов
/ 25 декабря 2018

1) Обработка постфиксных выражений на самом деле быстрее и использует меньше памяти, чем обработка инфиксных выражений, но это различие несущественно.Требуемый код также намного проще, но обычно это тоже не важно.Как правило, если кто-то пишет компилятор или интерпретатор для нового языка, он должен иметь возможность эффективно обрабатывать инфиксные выражения, и синтаксис языка должен быть таким, чтобы сделать его максимально полезным для его цели, а не сделать егокак можно проще скомпилировать или интерпретировать.

2) Язык программирования интерпретатор может обрабатывать инфиксные выражения напрямую.Однако все компиляторы и большинство интерпретаторов будут переводить выражения и операторы в другую форму, которая вообще не является выражением, поскольку это не текст.Иногда это промежуточное представление (IR), которое может быть снова переведено в машинный код.Промежуточные представления могут быть основанными на стеке, SSA или другими.Опять же, это не текст, поэтому он не имеет выражений и не требует анализа.

https://en.wikipedia.org/wiki/Intermediate_representation https://en.wikipedia.org/wiki/Static_single_assignment_form

...