Это часть грамматики для моего языка программирования. Во время компиляции возникают конфликты смены/сокращения.получение ошибок сдвига/уменьшения в моей грамматике
Rule 1: encryption_spec: key_spec
Rule 2: key_spec:
key_spec key_spec_content
| key_spec_content
;
Rule 3: key_spec_content: TOK_PROTECT key_keyowner
|TOK_PROTECT key_keyname
|TOK_PROTECT key_keymethod
|TOK_PROTECT key_pub_key
|TOK_COMMA key_keyowner
|TOK_COMMA key_keyname
|TOK_COMMA key_keymethod
|TOK_COMMA key_pub_key
|encoding
;
Я получаю сдвиг/свертка конфликт в правиле 1. Можете ли вы предложить мне что-то изменить?
Посмотрите на файл 'y.output' с' yacc -v', чтобы узнать, что представляет собой реальный конфликт - вам нужно посмотреть, в каком состоянии находится конфликт, и как парсер попадает в это состояние для его разрешения. –
Из аргумента y.output видно, что причина конфликта такова: грамматика не может решить, следует ли искать или объявлять появление блока encryption_spec в соответствии с правилом 1 после нахождения хотя бы одного из операторов по правилу 3 –
. Тогда есть какое-то другое правило, которое может следовать за «encryption_spec», которое не показано в вашем фрагменте выше, это источник конфликта. –