В дистрибутивах uWSGI должен быть модульным, с каждой функцией в качестве плагина. Но когда вы устанавливаете, используя специфичные для языка способы (pip, gem ...), соответствующий язык внедряется, поэтому вам не нужно загружать плагин
Bison / Yacc может сгенерировать синтаксический анализатор GLR, если вы укажете % glr-parser
в разделе параметров.
Мне нравится определять больше элементов. Вам не нужны элементы% left,% right,% prec.
simple_expr: NUMBER
| INC simple_expr
| DEC simple_expr
| '(' expr ')'
;
term: simple_expr
| term '*' simple_expr
| term '/' simple_expr
;
expr: term
| expr '+' term
| expr '-' term
;
Поэкспериментируйте с этим подходом.
Попробуйте следующее:
%token NUMBER ID INC DEC
%left '+' '-'
%left '*' '/'
%nonassoc '++' '--'
%left '('
%%
expr: NUMBER
| ID
| expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| '++' expr
| '--' expr
| expr '++'
| expr '--'
| '(' expr ')'
;
%%
Ключом является объявление постфиксных операторов как неассоциативных. Иначе можно было бы
++var++--
В скобках также необходимо указать приоритет, чтобы минимизировать предупреждения сдвига/смещения
.