Как я могу заставить конфликт shift \ reduce разрешить методом GLR?
Предположим, что я хочу, чтобы анализатор разрешал конфликт между оператором правой смены и двумя скобками угла закрытия аргументов шаблона для себя. Я делаю lexer пропускать два последовательных символа «>» в виде отдельных токенов, не объединяя их в один единственный токен «>>». Затем я помещаю эти правила в грамматику:Bison, C++ GLR синтаксический анализ: как заставить shift уменьшить конфликт?
operator_name:
"operator" ">"
| "operator" ">" ">"
;
Я хочу, чтобы это было конфликтом перехода/уменьшения. Если у меня есть объявление токена для «>» с левой ассоциативностью, это не будет конфликтом. Поэтому мне нужно удалить объявление приоритета токена \ ассоциативность, но это приводит ко многим другим конфликтам, которые я не хочу решать вручную, указав контекстуальный приоритет для каждого конфликтующего правила. Итак, есть ли способ заставить shift \ уменьшить конфликт при объявлении маркера?
«+1» для рассмотрения «>» как отдельный токен, чем оператор сдвига или тег закрытия тега.То же самое происходит и для «-», «отрицательный знак» или «оператор замещения». – umlcat
Да, я помню, используя эту технику для C# и Java, но эти синтаксические анализаторы были ANTLR-based, и это было немного проще, хотя и не без хакеров. – slavasav