Мне нужно дать высокий приоритет и оставить ассоциативность функциональному приложению в парсере OCaml. У меня есть куча разных токенов, которым он соответствует, например
%token LET REC EQ IN FUN ARROW
%token IF THEN ELSE
%token PLUS MINUS MUL DIV LT LE NE AND OR
%token LPAREN RPAREN
и я дал всем этим приоритет и ассоциативность, используя %left
,right
... Однако, поскольку exp
, который я использую для сопоставления, не является токеном, мне было интересно, как бы я это сделал в этом случае:
exp:
| exp exp { App($1,$2)}
У меня есть все совпадения для exp
, я не делал кучу разных exp1 exp2 и т. д. и хочу знать, возможно ли дать exp
exp
наивысший приоритет и оставить его.
Я разместил это на другом форуме для своего класса и получил:
Связать фиктивный токен с правилами применения функции можно следующим образом:
rule: .... %precc DUMMY_FUN_APP
Затем укажите ассоциативность, используя %left и фиктивный токен.
Но я не совсем уверен, что это значит, поэтому, если бы кто-то мог уточнить это или дать мне другое решение, это было бы здорово.