правила приоритета в зубров - PullRequest
0 голосов
/ 02 марта 2010

Вот правила грамматики:

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName ;

Подскажите, пожалуйста, как я могу сказать зубрам, что первое правило имеет наивысший приоритет, чем второе?

Я пробовал:

%nonassoc PROC

%right "->"

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName % prec PROC;

Но безрезультатно. Спасибо.

Ответы [ 2 ]

1 голос
/ 14 марта 2010

Для разрешения конфликтов уменьшения / уменьшения bison отдает приоритет правилам в том порядке, в котором они находятся в исходном файле, поэтому, будучи первым, первое правило имеет более высокий приоритет. Но это явно не то, что вы хотите, иначе вы бы не задавали этот вопрос.

Использование% nonassoc /% right дает приоритеты токенам для разрешения конфликтов сдвига / уменьшения. В этом случае важен приоритет токена для перехода к приоритету правила, которое должно быть уменьшено. Здесь задействовано только одно правило (хотя в текущем состоянии могут быть частично проанализированы другие правила), поэтому нет смысла говорить о том, что одно правило имеет более высокий или более низкий приоритет, чем другое в этой ситуации.

Так что же вы пытаетесь сделать? Что именно идет не так? EventExpression и ProcessName чем-то похожи, поэтому они имеют конфликты? Вы не даете никакой информации о том, что это за правила ...

0 голосов
/ 09 марта 2010

Я думаю, вы можете применить то, что написали, только когда есть левая рекурсия.Так что попробуйте что-то вроде этого.

%nonassoc PROC
%left EVENT

ProcessExpression :  EventExpression "->" ProcessExpression %prec EVENT

                    | ProcessName % prec PROC;

Спасибо, Гокул.

...