В настоящее время я реализую часть грамматики Decaf (язык программирования). Вот соответствующий фрагмент кода bison:
type:
INT
| ID
| type LS RS
;
local_var_decl:
type ID SEMICOLON
;
name:
THIS
| ID
| name DOT ID
| name LS expression RS
;
Тем не менее, как только я начал работать над производственным правилом name, мой синтаксический анализатор выдает предупреждение reduce-reduce.
Вот что находится внутри файла .output (созданный bison):
State 84
23 type: ID .
61 name: ID .
ID reduce using rule 23 (type)
LS reduce using rule 23 (type)
LS [reduce using rule 61 (name)]
$default reduce using rule 61 (name)
Итак, если мы дадим следующий ввод { abc[1] = abc; }
, это говорит о том, что syntax error, unexpected NUMBER, expected RS
. ЧИСЛО происходит здесь из правила выражения (в основном, как оно должно быть проанализировано), хотя оно пытается проанализировать его с помощью правила local_var_decl.
Как вы думаете, что нужно изменить, чтобы решить эту проблему? Потратил около 2 часов, пробовал разные вещи, не работает.
Спасибо!!
PS. Вот ссылка на полный исходный код .y