/******************************************************************************** * * File: simple_calc.cup * Title: The calculator parser without actions * Programmer: Leonidas Fegaras, UTA * Date: 1/10/03 * ********************************************************************************/ import java_cup.runtime.*; /* Terminals (tokens returned by the scanner). */ terminal LP, RP, COMMA, SEMI, ASSIGN, IF, THEN, ELSE, AND, OR, NOT, QUIT, PLUS, TIMES, MINUS, DIV, EQ, LT, GT, LE, NE, GE, FALSE, TRUE, DEFINE; terminal String ID; terminal Integer INT; terminal Float REALN; terminal String STRINGT; non terminal exp, string, name; non terminal expl, names; non terminal item, prog; precedence nonassoc ELSE; precedence right OR; precedence right AND; precedence nonassoc NOT; precedence left EQ, LT, GT, LE, GE, NE; precedence left PLUS, MINUS; precedence left TIMES, DIV; start with prog; prog ::= item SEMI | prog item SEMI ; item ::= exp | QUIT | ID ASSIGN exp | DEFINE ID LP names RP EQ exp ; name ::= ID ; string ::= STRINGT ; exp ::= INT | REALN | TRUE | FALSE | name | string | LP exp RP | IF exp THEN exp ELSE exp | exp EQ exp | exp LT exp | exp GT exp | exp LE exp | exp NE exp | exp GE exp | exp PLUS exp | exp MINUS exp | exp TIMES exp | exp DIV exp | exp OR exp | exp AND exp | NOT exp | name LP expl RP ; expl ::= expl COMMA exp | exp ; names ::= names COMMA name | name ;