/**************************************************************************/ /* */ /* Menhir */ /* */ /* François Pottier, INRIA Rocquencourt */ /* Yann Régis-Gianas, PPS, Université Paris Diderot */ /* */ /* Copyright 2005-2008 Institut National de Recherche en Informatique */ /* et en Automatique. All rights reserved. This file is distributed */ /* under the terms of the Q Public License version 1.0, with the change */ /* described in file LICENSE. */ /* */ /**************************************************************************/ %token INT %token PLUS MINUS TIMES DIV %token LPAREN RPAREN %token EOL %left PLUS MINUS /* lowest precedence */ %left TIMES DIV /* medium precedence */ %nonassoc UMINUS /* highest precedence */ %start main %% main: | e = expr EOL { e } expr: | i = INT { i } | LPAREN e = expr RPAREN { e } | e1 = expr PLUS e2 = expr { e1 + e2 } | e1 = expr MINUS e2 = expr { e1 - e2 } | e1 = expr TIMES e2 = expr { e1 * e2 } | e1 = expr DIV e2 = expr { e1 / e2 } | MINUS e = expr %prec UMINUS { - e }