Yacc и Bison обычно используют леворекурсивные правила, и показанные правила не являются леворекурсивными.
Как показано, первое правило эквивалентно:
SomeRuleLoop:
/* Nothing */
| Rule ',' SomeRuleLoop
;
Это праворекурсивное правило, которое говорит, что SomeRuleLoop - это либо пустая строка токенов, либо «Правило», за которым следует запятая и еще несколько SomeRuleLoop. Обратите внимание, что это означает, что SomeRuleLoop заканчивается запятой, что, вероятно, не то, что вы имели в виду.
Первое правило, вероятно, должно читаться следующим образом:
SomeRuleLoop:
Rule
| SomeRuleLoop ',' Rule
;
Обратите внимание, что важно учитывать пустые альтернативы, но добавление их везде приводит к неоднозначности грамматики (больше конфликтов сдвига / уменьшения)
Вам также необходимо использовать токен «ошибка» (все строчные буквы), а не «ошибка» (смешанный регистр), чтобы указать точку, где может произойти восстановление после ошибки.
Тем не менее, я не уверен, каковы остальные ваши проблемы ...