использовать анализатор приоритетов не только для выражений? - PullRequest
4 голосов
/ 11 марта 2011

Можно ли использовать какой-то синтаксический анализатор операторного приоритета или алгоритм маневрового двора для простого языка программирования?Например, если этот язык имеет только выражения, функции и объявления переменных.

Каковы минусы и плюсы этого пути?Может ли он быть намного быстрее, чем традиционные парсеры LL / LR?

1 Ответ

4 голосов
/ 11 марта 2011

Чтобы ответить на ваш первый вопрос, да, можно выполнить синтаксический анализ приоритета оператора как часть языка.Если вы заинтересованы в этом, вам следует изучить парсеры Pratt .Обычно это вариант синтаксического анализа сверху вниз, поэтому он должен находиться в том же районе производительности, что и другие параметры синтаксического анализа.Вообще, я думаю, что люди чрезмерно обеспокоены скоростью разбора.Компилятор собирается тратить большую часть своего времени на оптимизацию, и потеет несколько миллисекунд на этапе синтаксического анализа, как мне кажется, не стоит.

Есть язык, сорока ,который реализовал парсер Pratt.Таким образом, большое преимущество состоит в том, что они определили все операторы для языка в библиотеке вместо основного языка.Это делает основной язык невероятно компактным и расширяемым.Недостатком является то, что это заставляет других пользователей постоянно задаваться вопросом, каким будет приоритет конкретного оператора, поскольку обычные встроенные нормы могут не применяться.

...