title: Using yacc precedence for rules with no terminals, only non-terminals
body: <p>could some one help me on this i have this rule :</p>
  
  <pre><code>e   : T_NUM                                            { $$ = mk_int($1);}
  | T_POP e[l]                                       { $$ = mk_app(mk_op(POP),$l);}
  | T_NEXT e[l]                                      { $$ = mk_app(mk_op(NEXT),$l);}
  | "{" e[x] "," e[y] "}"                            { $$ = mk_point($x,$y);}
  | e T_PLUS e                                       { $$ = mk_app(mk_app(mk_op(PLUS),$1),$3);}
  | e T_MINUS e                                      { $$ = mk_app(mk_app(mk_op(MINUS),$1),$3);}
  | e T_DIV e                                        { $$ = mk_app(mk_app(mk_op(DIV),$1),$3);}
  | e T_MULT e                                       { $$ = mk_app(mk_app(mk_op(MULT),$1),$3);}
  | e T_LEQ e                                        { $$ = mk_app(mk_app(mk_op(LEQ),$1),$3) ;}
  | e T_LE e                                         { $$ = mk_app(mk_app(mk_op(LE),$1),$3) ;}
  | e T_GEQ e                                        { $$ = mk_app(mk_app(mk_op(GEQ),$1),$3) ;}
  | e T_GE e                                         { $$ = mk_app(mk_app(mk_op(GE),$1),$3) ;}
  | e T_OR e                                         { $$ = mk_app(mk_app(mk_op(OR),$1),$3) ;}
  | e T_AND e                                        { $$ = mk_app(mk_app(mk_op(AND),$1),$3) ;}
  | T_ID                                             { $$ = mk_id($1);}/*Reconnaissance d'identificateurs et de variables*/
  | e T_EQ e                                         { $$ = mk_app(mk_app(mk_op(EQ),$1),$3) ;}
  | T_NOT e[expr]                                    { $$ = mk_app(mk_op(NOT),$expr) ;}
  | T_FUN T_ID[var] arg_list[expr]                   { $$ = mk_fun($var,$expr);env = push_rec_env($var,$$,env);} /*Définition de fonctions*/
  | T_LET T_ID[x] T_EQUAL e[arg] T_IN e[exp]         { $$ = mk_app(mk_fun($x,$exp),$arg); env = push_rec_env($x,$$,env);}/*Fonction IN*/
  | e[exp] T_WHERE T_ID[x] T_EQUAL e[arg]            { $$ = mk_app(mk_fun($x,$exp),$arg); env = push_rec_env($x,$$,env);}/*Fonction WHERE*/
  | T_IF e[cond] T_THEN e[then_br] T_ELSE e[else_br] { $$ = mk_cond($cond, $then_br, $else_br) ;}
  | '[' list[l] ']'                                  { $$ = $l;}/*OP sur Listes*/
  | e[exp] T_PUSH e[l]                               { $$ = mk_app(mk_app(mk_op(PUSH),$exp),$l);} 
  | '(' f_arg[fun] e[arg] ')'                        { $$ = mk_app($fun,$arg);}/*Exécution de fonctions à plusieurs variables*/
  | '(' e ')'                                        { $$ = $2;}/*Ignorer les parentheses inutiles*/
  ;
  </code></pre>
  
  <p>my problem is that at  '(' f_arg[fun] e[arg] ')'  i would like to remove the '()' around the syntax but this generates tons of conflicts so if some one could give me a hand on how could i change this syntax to work without the parentheses
  for information the f_arg:</p>
  
  <pre><code>f_arg :e                                                            {$$ = $1;}
    |f_arg[fun] e[arg]                                            {$$ = mk_app($fun,$arg);}
    ;
  </code></pre>
  
  <p>thanks all </p>
  
  <p>the full code can be found at </p>
  
  <p><a href="https://github.com/WillianPaiva/project_AS" rel="nofollow">https://github.com/WillianPaiva/project_AS</a></p>
  
  <p>and sorry about my English </p>