Как зафиксировать YACC, смещают/уменьшают конфликты от постинкрементного оператора?

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

6
задан Zifre 20 May 2009 в 20:24
поделиться

3 ответа

Bison / Yacc может сгенерировать синтаксический анализатор GLR, если вы укажете % glr-parser в разделе параметров.

3
ответ дан 17 December 2019 в 07:08
поделиться

Мне нравится определять больше элементов. Вам не нужны элементы% 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
;

Поэкспериментируйте с этим подходом.

0
ответ дан 17 December 2019 в 07:08
поделиться

Попробуйте следующее:

%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++--

В скобках также необходимо указать приоритет, чтобы минимизировать предупреждения сдвига/смещения

.
2
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: