Является ли добавление произвольных прецедентов к правилам, которые приводят к конфликту сдвига/уменьшения, плохой идеей?

#parsing #yacc

Вопрос:

в некоторых случаях, когда я абсолютно не уверен, как исправить конфликт сдвига/уменьшения, не является ли плохой идеей добавлять произвольный приоритет перед токенами, которые заставляют s/r разрешать их в качестве исправления?

Комментарии:

1. Отключение предупреждений не решает основную проблему, если вы об этом спрашиваете. Если вы просто вводите случайные объявления до тех пор, пока предупреждение не исчезнет, то это плохая идея. Если вы понимаете проблему и можете доказать себе, что разрешение, сгенерированное объявлениями приоритета, действительно создает синтаксический анализатор для нужного языка, тогда все в порядке.

2. @rici Я понимаю это в большинстве случаев, но в тех случаях, когда я не могу понять, почему происходит S/R, и мне нечего попробовать, я даю более высокий приоритет одному из правил, которые вызывают S/R, и это устраняет проблему. До сих пор это, похоже, не вызывало серьезных проблем, но мне интересно, насколько это плохо. Я видел, как это делают несколько грамматик, на ум приходит Antlr, где автор использовал предикаты, и они действительно не знали, что/зачем это было нужно, но это исправило проблемы, и этот синтаксический анализатор все еще используется в производстве.

3. Я думаю, это твое решение. Я бы этого не сделал. Конечно, другие люди совершают глупости. И во многих производственных кодах есть неясные ошибки, которые остаются незамеченными в течение многих лет, пока не произойдет катастрофа, и в этот момент обнаруживается, что немного большей осторожности могло бы предотвратить катастрофу