Да.Предполагая, что вы имеете в виду тот, который также использует постскриптную нотацию, это означает, что вы бы определили свои выражения примерно так:
expression: operand operand operator
Вместо более распространенной инфиксной нотации:
expression: operand operator operand
, но вряд ликвалифицируется как большое дело.Если вы подразумеваете что-то другое под «PostScript-подобным», вам, вероятно, придется уточнить, прежде чем будет дан лучший ответ.
Редактировать: Допустить произвольное количество операндов и операторов также довольно просто:
operand_list:
| operand_list operand
;
operator_list:
| operator_list operator
;
expression: operand_list operator_list
;
В данном случае это не попытка принудительно установить нужное количество операторов, присутствующих для какого-либо конкретного операнда - вам придется добавить эти проверки отдельно.В типичном случае постскриптная нотация выполняется на стековом компьютере, поэтому большинство таких проверок становятся простыми проверками стека.
Я должен добавить, что, хотя вы, конечно, можете написать такие парсеры во что-то вродеyacc, языки, использующие нотацию postscript, обычно требуют такого минимального синтаксического анализа, чтобы вы часто передавали их напрямую какому-то интерпретатору виртуальной машины, который выполняет их напрямую, с минимальным синтаксическим анализом (в основном, синтаксический анализ сводится к выдаче ошибки, если вы пытаетесь использоватьимя, которое не было определено).