2015-11-18 3 views
0

Скажем, у меня есть язык постфиксную какLookahead с языком постфикса

3 2 result +  // equivalent to result = 3 + 2 
result 1 result + // equivalent to ++result 

как я должен реализовать предпросмотр для рекурсивного спуска парсер (я делаю это в C++)?

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

+1

Если вы хотите разобрать этот язык или просто оценить его семантику, то, вероятно, лучше всего узнать о [языковых языках, ориентированных на стек] (https://en.wikipedia.org/wiki/Stack-oriented_programming_language). Проще говоря, вы прокручиваете чтение токена, решая, сколько элементов выходить из стека (ноль или больше), «выполнять» значение токена и вставлять элементы в стек (ноль или более). И синтаксический анализатор, и интерпретатор могут быть построены путем назначения соответствующего значения токенам. –

ответ

1

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

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

+0

Спасибо! Я полагаю, что C++ не работает так? Я не думаю; line terminator используется, чтобы вызывать аргументы из стека при достижении – Dean

+0

@Dean Нет, C++ определенно не работает. :) На самом деле, C++, как известно, трудно правильно разобрать (просто посмотрите на [самую неприятную проблему синтаксического анализа] (https://en.wikipedia.org/wiki/Most_vexing_parse)). –

Смежные вопросы