Я пишу простой калькулятор в yacc/bison.Можно ли сделать эту грамматику YACC однозначной? expr: ... | expr expr
грамматика для выражения выглядит примерно так:
expr
: NUM
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1/$3; }
| '+' expr %prec '*' { $$ = $1; }
| '-' expr %prec '*' { $$ = $1; }
| '(' expr ')' { $$ = $2; }
| expr expr { $$ = $1 '*' $2; }
;
Я объявил приоритет операторов, как это.
%left '+' '-'
%left '*' '/'
%nonassoc '('
Проблема с последним правилом:
Я хочу, чтобы это правило, потому что я хочу, чтобы иметь возможность писать такие выражения, как 5(3+4)(3-24)
в моем калькуляторе.
Можно ли сделать эту грамматику однозначной?
Я думаю, что сайт [Computer Science] (https://cs.stackexchange.com/) является более подходящим местом для такого типа вопросов. – ray
Благодарим вас за отзыв @ray. Я скопировал этот вопрос и разместил его там с небольшими изменениями. Я не уверен, должен ли я закрыть этот файл в stackoverflow, поэтому я оставлю его открытым, чтобы люди могли голосовать, чтобы закрыть его, если он не по теме. – wefwefa3
Закройте его. Это не по теме и здесь, как вы упомянули. Я попытался проголосовать за закрытие, но сайт CS не отображался в моих других вариантах обмена сайтом:/ – ray