|
CalculatorParser.java
|
// *******************************************************************
// This file has been automatically generated from the grammar in file
// Calculator.grm by ilog.language.syntax.ParserGenerator on
// Mon Dec 20 18:05:13 PST 2004 --- !!! PLEASE DO NO EDIT !!!
// *******************************************************************
import java.io.Reader;
import java.io.StringReader;
import java.io.IOException;
import ilog.language.syntax.*;
import java.util.HashMap;
/* ************ */
/* PARSER CLASS */
/* ************ */
public class CalculatorParser extends StaticParser
{
/* ************************ */
/* PARSER CLASS CONSTRUCTOR */
/* ************************ */
public CalculatorParser(Tokenizer t)
{
input = t;
admitsOperators = false;
}
/* ************************* */
/* PARSER CLASS DECLARATIONS */
/* ************************* */
HashMap defs = new HashMap();
/* ********************** */
/* STATIC INITIALIZATIONS */
/* ********************** */
static
{
initializeTerminals();
initializeNonTerminals();
initializeRules();
initializeParserActions();
initializeParserStates();
initializeActionTables();
initializeGotoTables();
initializeStateTables();
}
/* ********************* */
/* PARTIAL PARSE METHODS */
/* ********************* */
final static ParseNode $SESSION_SWITCH$ = new ParseNode(terminals[3]);
public final void parseSession (String s) throws IOException
{
parseSession(new StringReader(s));
}
public final void parseSession (Reader r) throws IOException
{
input.setReader(r);
errorManager().recoverFromErrors(false);
setSwitchToken($SESSION_SWITCH$);
parse();
}
final static ParseNode $DEFINITION_SWITCH$ = new ParseNode(terminals[5]);
public final void parseDefinition (String s) throws IOException
{
parseDefinition(new StringReader(s));
}
public final void parseDefinition (Reader r) throws IOException
{
input.setReader(r);
errorManager().recoverFromErrors(false);
setSwitchToken($DEFINITION_SWITCH$);
parse();
}
final static ParseNode $EXPRESSION_SWITCH$ = new ParseNode(terminals[4]);
public final void parseExpression (String s) throws IOException
{
parseExpression(new StringReader(s));
}
public final void parseExpression (Reader r) throws IOException
{
input.setReader(r);
errorManager().recoverFromErrors(false);
setSwitchToken($EXPRESSION_SWITCH$);
parse();
}
/* **************** */
/* SEMANTIC ACTIONS */
/* **************** */
protected ParseNode semanticAction(ParserRule $rule$) throws IOException
{
ParseNode $head$ = new ParseNode($rule$.head);
switch($rule$.index())
{
case 2:
{
$head$ = $head$.copy(node($rule$,2));
break;
}
case 3:
{
$head$ = $head$.copy(node($rule$,2));
break;
}
case 4:
{
$head$ = $head$.copy(node($rule$,2));
break;
}
case 8:
{
currentNode().show(); // show the current parse tree
if (!Double.isNaN(node($rule$,0).nvalue())) System.out.println(node($rule$,0).nvalue());
CalculatorTokenizer.prompt();
break;
}
case 10:
{
CalculatorDefinition $node1$;
if (node($rule$,0) instanceof CalculatorDefinition)
$node1$ = (CalculatorDefinition)node($rule$,0);
else
{
$node1$ = new CalculatorDefinition(node($rule$,0));
replaceStackNode($rule$,0,$node1$);
}
currentNode().show(); // show the current parse tree
System.out.println($node1$.getMessage());
CalculatorTokenizer.prompt();
break;
}
case 12:
{
errorManager().reportErrors(true);
CalculatorTokenizer.prompt();
break;
}
case 14:
{
Double value = (Double)defs.get(node($rule$,1).svalue());
if (value == null)
System.out.println("*** Undefined identifier: "+node($rule$,1).svalue());
else
$head$.setNvalue(value.doubleValue());
break;
}
case 16:
{
$head$.setNvalue(node($rule$,1).nvalue() + node($rule$,3).nvalue());
break;
}
case 17:
{
$head$.setNvalue(node($rule$,1).nvalue() - node($rule$,3).nvalue());
break;
}
case 18:
{
$head$.setNvalue(node($rule$,1).nvalue() * node($rule$,3).nvalue());
break;
}
case 19:
{
$head$.setNvalue(node($rule$,1).nvalue() / node($rule$,3).nvalue());
break;
}
case 20:
{
$head$.setNvalue(- node($rule$,2).nvalue());
break;
}
case 21:
{
$head$.setNvalue(node($rule$,2).nvalue());
break;
}
case 22:
{
CalculatorDefinition $node0$ = new CalculatorDefinition($head$);
$head$ = (CalculatorDefinition)$node0$;
defs.put(node($rule$,1).svalue(),new Double(node($rule$,3).nvalue()));
$node0$.setNvalue(node($rule$,3).nvalue());
$node0$.setSvalue(node($rule$,1).svalue());
$node0$.setMessage("*** Defined "+$node0$.svalue()+" ("+$node0$.nvalue()+")");
break;
}
case 23:
{
System.out.println("*** Bye bye!...");
System.exit(0);
break;
}
case 0: case 1: case 6:
break;
default:
$head$ = $head$.copy(node($rule$,1));
break;
}
return $head$;
}
/* **************** */
/* TERMINAL SYMBOLS */
/* **************** */
static void initializeTerminals ()
{
terminals = new ParserTerminal[18];
newTerminal(0,"$EMPTY$",1,2);
newTerminal(1,"$E_O_I$",1,2);
newTerminal(2,"error",1,2);
newTerminal(3,"$Session_switch$",1,2);
newTerminal(4,"$Expression_switch$",1,2);
newTerminal(5,"$Definition_switch$",1,2);
newTerminal(6,"NUMBER",1,2);
newTerminal(7,"IDENTIFIER",1,2);
newTerminal(8,"+",11,0);
newTerminal(9,"-",11,0);
newTerminal(10,"*",21,0);
newTerminal(11,"/",21,0);
newTerminal(12,"UMINUS",31,1);
newTerminal(13,";",1,2);
newTerminal(14,"(",1,2);
newTerminal(15,")",1,2);
newTerminal(16,"=",1,2);
newTerminal(17,"exit",1,2);
}
/* ******************** */
/* NON-TERMINAL SYMBOLS */
/* ******************** */
static void initializeNonTerminals ()
{
nonterminals = new ParserNonTerminal[12];
newNonTerminal(0,"$START$");
newNonTerminal(1,"$ROOTS$");
newNonTerminal(2,"Session");
newNonTerminal(3,"Expression");
newNonTerminal(4,"Definition");
newNonTerminal(5,"Actions");
newNonTerminal(6,"Exit");
newNonTerminal(7,"Action");
newNonTerminal(8,"$ACTION0$");
newNonTerminal(9,"$ACTION1$");
newNonTerminal(10,"$ACTION2$");
newNonTerminal(11,"$ACTION3$");
}
/* **************** */
/* PRODUCTION RULES */
/* **************** */
static void initializeRules ()
{
rules = new ParserRule[25];
rules[0] = new ParserRule(0,1,0,1,2);
rules[1] = new ParserRule(1,1,1,1,2);
rules[2] = new ParserRule(1,2,2,1,2);
rules[3] = new ParserRule(1,2,3,1,2);
rules[4] = new ParserRule(1,2,4,1,2);
rules[5] = new ParserRule(2,2,5,1,2);
rules[6] = new ParserRule(5,0,6,1,2);
rules[7] = new ParserRule(5,2,7,1,2);
rules[8] = new ParserRule(8,0,8,1,2);
rules[9] = new ParserRule(7,3,9,1,2);
rules[10] = new ParserRule(9,0,10,1,2);
rules[11] = new ParserRule(7,3,11,1,2);
rules[12] = new ParserRule(10,0,12,1,2);
rules[13] = new ParserRule(7,3,13,1,2);
rules[14] = new ParserRule(3,1,14,1,2);
rules[15] = new ParserRule(3,1,15,1,2);
rules[16] = new ParserRule(3,3,16,11,0);
rules[17] = new ParserRule(3,3,17,11,0);
rules[18] = new ParserRule(3,3,18,21,0);
rules[19] = new ParserRule(3,3,19,21,0);
rules[20] = new ParserRule(3,2,20,31,1);
rules[21] = new ParserRule(3,3,21,1,2);
rules[22] = new ParserRule(4,3,22,1,2);
rules[23] = new ParserRule(11,0,23,1,2);
rules[24] = new ParserRule(6,3,24,1,2);
}
/* ************** */
/* PARSER ACTIONS */
/* ************** */
static void initializeParserActions ()
{
actions = new ParserAction[235];
newAction(0,5,0);
newAction(1,2,0);
newAction(2,0,2);
newAction(3,0,4);
newAction(4,0,6);
newAction(5,1,6);
newAction(6,1,6);
newAction(7,1,6);
newAction(8,1,6);
newAction(9,1,6);
newAction(10,1,6);
newAction(11,1,1);
newAction(12,0,10);
newAction(13,0,11);
newAction(14,0,12);
newAction(15,0,14);
newAction(16,1,6);
newAction(17,1,6);
newAction(18,1,6);
newAction(19,1,6);
newAction(20,1,6);
newAction(21,1,6);
newAction(22,0,26);
newAction(23,0,27);
newAction(24,0,10);
newAction(25,0,11);
newAction(26,0,12);
newAction(27,0,31);
newAction(28,0,8);
newAction(29,1,4);
newAction(30,0,9);
newAction(31,0,10);
newAction(32,0,11);
newAction(33,0,12);
newAction(34,0,14);
newAction(35,0,10);
newAction(36,0,11);
newAction(37,0,12);
newAction(38,0,14);
newAction(39,1,15);
newAction(40,1,15);
newAction(41,1,15);
newAction(42,1,15);
newAction(43,1,15);
newAction(44,1,15);
newAction(45,1,15);
newAction(46,1,15);
newAction(47,1,15);
newAction(48,1,15);
newAction(49,1,15);
newAction(50,1,15);
newAction(51,0,10);
newAction(52,0,11);
newAction(53,0,12);
newAction(54,0,14);
newAction(55,0,15);
newAction(56,0,16);
newAction(57,0,17);
newAction(58,0,18);
newAction(59,1,22);
newAction(60,1,22);
newAction(61,1,14);
newAction(62,1,14);
newAction(63,1,14);
newAction(64,1,14);
newAction(65,1,14);
newAction(66,1,14);
newAction(67,1,14);
newAction(68,1,14);
newAction(69,1,14);
newAction(70,1,14);
newAction(71,1,14);
newAction(72,1,14);
newAction(73,0,10);
newAction(74,0,11);
newAction(75,0,12);
newAction(76,0,14);
newAction(77,0,10);
newAction(78,0,11);
newAction(79,0,12);
newAction(80,0,14);
newAction(81,0,10);
newAction(82,0,11);
newAction(83,0,12);
newAction(84,0,14);
newAction(85,0,10);
newAction(86,0,11);
newAction(87,0,12);
newAction(88,0,14);
newAction(89,0,15);
newAction(90,0,16);
newAction(91,0,17);
newAction(92,0,18);
newAction(93,1,18);
newAction(94,1,18);
newAction(95,1,18);
newAction(96,1,18);
newAction(97,1,18);
newAction(98,1,18);
newAction(99,1,18);
newAction(100,1,18);
newAction(101,1,18);
newAction(102,1,18);
newAction(103,1,18);
newAction(104,1,18);
newAction(105,0,15);
newAction(106,0,16);
newAction(107,0,17);
newAction(108,0,18);
newAction(109,1,19);
newAction(110,1,19);
newAction(111,1,19);
newAction(112,1,19);
newAction(113,1,19);
newAction(114,1,19);
newAction(115,1,19);
newAction(116,1,19);
newAction(117,1,19);
newAction(118,1,19);
newAction(119,1,19);
newAction(120,1,19);
newAction(121,0,15);
newAction(122,0,16);
newAction(123,0,17);
newAction(124,0,18);
newAction(125,1,16);
newAction(126,1,16);
newAction(127,1,16);
newAction(128,1,16);
newAction(129,1,16);
newAction(130,1,16);
newAction(131,1,16);
newAction(132,1,16);
newAction(133,1,16);
newAction(134,1,16);
newAction(135,0,15);
newAction(136,0,16);
newAction(137,0,17);
newAction(138,0,18);
newAction(139,1,17);
newAction(140,1,17);
newAction(141,1,17);
newAction(142,1,17);
newAction(143,1,17);
newAction(144,1,17);
newAction(145,1,17);
newAction(146,1,17);
newAction(147,1,17);
newAction(148,1,17);
newAction(149,0,24);
newAction(150,0,15);
newAction(151,0,16);
newAction(152,0,17);
newAction(153,0,18);
newAction(154,1,21);
newAction(155,1,21);
newAction(156,1,21);
newAction(157,1,21);
newAction(158,1,21);
newAction(159,1,21);
newAction(160,1,21);
newAction(161,1,21);
newAction(162,1,21);
newAction(163,1,21);
newAction(164,1,21);
newAction(165,1,21);
newAction(166,0,15);
newAction(167,0,16);
newAction(168,0,17);
newAction(169,0,18);
newAction(170,1,20);
newAction(171,1,20);
newAction(172,1,20);
newAction(173,1,20);
newAction(174,1,20);
newAction(175,1,20);
newAction(176,1,20);
newAction(177,1,20);
newAction(178,1,20);
newAction(179,1,20);
newAction(180,1,20);
newAction(181,1,20);
newAction(182,1,23);
newAction(183,1,12);
newAction(184,1,10);
newAction(185,1,5);
newAction(186,0,15);
newAction(187,0,16);
newAction(188,0,17);
newAction(189,0,18);
newAction(190,1,8);
newAction(191,0,9);
newAction(192,1,14);
newAction(193,1,14);
newAction(194,1,14);
newAction(195,1,14);
newAction(196,1,14);
newAction(197,1,7);
newAction(198,1,7);
newAction(199,1,7);
newAction(200,1,7);
newAction(201,1,7);
newAction(202,1,7);
newAction(203,0,34);
newAction(204,1,9);
newAction(205,1,9);
newAction(206,1,9);
newAction(207,1,9);
newAction(208,1,9);
newAction(209,1,9);
newAction(210,1,9);
newAction(211,0,36);
newAction(212,1,11);
newAction(213,1,11);
newAction(214,1,11);
newAction(215,1,11);
newAction(216,1,11);
newAction(217,1,11);
newAction(218,1,11);
newAction(219,0,38);
newAction(220,1,13);
newAction(221,1,13);
newAction(222,1,13);
newAction(223,1,13);
newAction(224,1,13);
newAction(225,1,13);
newAction(226,1,13);
newAction(227,0,40);
newAction(228,1,24);
newAction(229,1,2);
newAction(230,0,15);
newAction(231,0,16);
newAction(232,0,17);
newAction(233,0,18);
newAction(234,1,3);
}
/* ************* */
/* PARSER STATES */
/* ************* */
static void initializeParserStates ()
{
states = new ParserState[43];
for (int i=0; i<43; i++) newState(i);
}
/* ************* */
/* ACTION TABLES */
/* ************* */
static void initializeActionTables ()
{
newActionTables(36);
newActionTable(0,9);
setAction(0,17,10);
setAction(0,2,5);
setAction(0,4,2);
setAction(0,9,8);
setAction(0,6,6);
setAction(0,14,9);
setAction(0,3,3);
setAction(0,7,7);
setAction(0,5,4);
newActionTable(1,1);
setAction(1,1,11);
newActionTable(2,4);
setAction(2,9,12);
setAction(2,6,13);
setAction(2,14,14);
setAction(2,7,15);
newActionTable(3,1);
setAction(3,1,1);
newActionTable(4,6);
setAction(4,17,21);
setAction(4,2,16);
setAction(4,9,19);
setAction(4,6,17);
setAction(4,14,20);
setAction(4,7,18);
newActionTable(5,6);
setAction(5,17,22);
setAction(5,2,23);
setAction(5,9,24);
setAction(5,6,25);
setAction(5,14,26);
setAction(5,7,27);
newActionTable(6,1);
setAction(6,7,28);
newActionTable(7,1);
setAction(7,1,29);
newActionTable(8,1);
setAction(8,16,30);
newActionTable(9,12);
setAction(9,17,50);
setAction(9,15,49);
setAction(9,2,40);
setAction(9,13,47);
setAction(9,9,44);
setAction(9,8,43);
setAction(9,11,46);
setAction(9,6,41);
setAction(9,1,39);
setAction(9,14,48);
setAction(9,10,45);
setAction(9,7,42);
newActionTable(10,6);
setAction(10,13,60);
setAction(10,8,56);
setAction(10,9,55);
setAction(10,11,57);
setAction(10,1,59);
setAction(10,10,58);
newActionTable(11,12);
setAction(11,17,72);
setAction(11,15,71);
setAction(11,2,62);
setAction(11,13,69);
setAction(11,9,66);
setAction(11,8,65);
setAction(11,11,68);
setAction(11,6,63);
setAction(11,1,61);
setAction(11,14,70);
setAction(11,10,67);
setAction(11,7,64);
newActionTable(12,12);
setAction(12,17,104);
setAction(12,15,103);
setAction(12,2,94);
setAction(12,13,101);
setAction(12,8,97);
setAction(12,9,98);
setAction(12,6,95);
setAction(12,11,100);
setAction(12,1,93);
setAction(12,14,102);
setAction(12,7,96);
setAction(12,10,99);
newActionTable(13,12);
setAction(13,17,120);
setAction(13,15,119);
setAction(13,2,110);
setAction(13,13,117);
setAction(13,8,113);
setAction(13,9,114);
setAction(13,6,111);
setAction(13,11,116);
setAction(13,1,109);
setAction(13,14,118);
setAction(13,7,112);
setAction(13,10,115);
newActionTable(14,12);
setAction(14,17,134);
setAction(14,15,133);
setAction(14,2,126);
setAction(14,13,131);
setAction(14,8,129);
setAction(14,9,130);
setAction(14,6,127);
setAction(14,11,123);
setAction(14,1,125);
setAction(14,14,132);
setAction(14,7,128);
setAction(14,10,124);
newActionTable(15,12);
setAction(15,17,148);
setAction(15,15,147);
setAction(15,2,140);
setAction(15,13,145);
setAction(15,8,143);
setAction(15,9,144);
setAction(15,6,141);
setAction(15,11,137);
setAction(15,1,139);
setAction(15,14,146);
setAction(15,7,142);
setAction(15,10,138);
newActionTable(16,5);
setAction(16,15,149);
setAction(16,8,151);
setAction(16,9,150);
setAction(16,11,152);
setAction(16,10,153);
newActionTable(17,12);
setAction(17,17,165);
setAction(17,15,164);
setAction(17,2,155);
setAction(17,13,162);
setAction(17,9,159);
setAction(17,8,158);
setAction(17,11,161);
setAction(17,6,156);
setAction(17,1,154);
setAction(17,14,163);
setAction(17,10,160);
setAction(17,7,157);
newActionTable(18,12);
setAction(18,17,181);
setAction(18,15,180);
setAction(18,2,171);
setAction(18,13,178);
setAction(18,8,174);
setAction(18,9,175);
setAction(18,6,172);
setAction(18,11,177);
setAction(18,1,170);
setAction(18,14,179);
setAction(18,7,173);
setAction(18,10,176);
newActionTable(19,1);
setAction(19,13,182);
newActionTable(20,1);
setAction(20,13,183);
newActionTable(21,1);
setAction(21,13,184);
newActionTable(22,1);
setAction(22,1,185);
newActionTable(23,5);
setAction(23,13,190);
setAction(23,8,187);
setAction(23,9,186);
setAction(23,11,188);
setAction(23,10,189);
newActionTable(24,6);
setAction(24,13,196);
setAction(24,9,193);
setAction(24,8,192);
setAction(24,11,195);
setAction(24,16,191);
setAction(24,10,194);
newActionTable(25,6);
setAction(25,17,202);
setAction(25,2,197);
setAction(25,9,200);
setAction(25,6,198);
setAction(25,14,201);
setAction(25,7,199);
newActionTable(26,1);
setAction(26,13,203);
newActionTable(27,7);
setAction(27,17,210);
setAction(27,2,205);
setAction(27,9,208);
setAction(27,6,206);
setAction(27,1,204);
setAction(27,14,209);
setAction(27,7,207);
newActionTable(28,1);
setAction(28,13,211);
newActionTable(29,7);
setAction(29,17,218);
setAction(29,2,213);
setAction(29,9,216);
setAction(29,6,214);
setAction(29,1,212);
setAction(29,14,217);
setAction(29,7,215);
newActionTable(30,1);
setAction(30,13,219);
newActionTable(31,7);
setAction(31,17,226);
setAction(31,2,221);
setAction(31,9,224);
setAction(31,6,222);
setAction(31,1,220);
setAction(31,14,225);
setAction(31,7,223);
newActionTable(32,1);
setAction(32,13,227);
newActionTable(33,1);
setAction(33,1,228);
newActionTable(34,1);
setAction(34,1,229);
newActionTable(35,5);
setAction(35,8,231);
setAction(35,9,230);
setAction(35,11,232);
setAction(35,1,234);
setAction(35,10,233);
}
/* *********** */
/* GOTO TABLES */
/* *********** */
static void initializeGotoTables ()
{
newGotoTables(17);
newGotoTable(0,3);
setGoto(0,2,1);
setGoto(0,1,3);
setGoto(0,5,5);
newGotoTable(1,0);
newGotoTable(2,1);
setGoto(2,3,42);
newGotoTable(3,2);
setGoto(3,2,41);
setGoto(3,5,5);
newGotoTable(4,4);
setGoto(4,4,28);
setGoto(4,6,29);
setGoto(4,3,30);
setGoto(4,7,32);
newGotoTable(5,1);
setGoto(5,4,7);
newGotoTable(6,1);
setGoto(6,3,13);
newGotoTable(7,1);
setGoto(7,3,25);
newGotoTable(8,1);
setGoto(8,3,23);
newGotoTable(9,1);
setGoto(9,3,22);
newGotoTable(10,1);
setGoto(10,3,21);
newGotoTable(11,1);
setGoto(11,3,20);
newGotoTable(12,1);
setGoto(12,3,19);
newGotoTable(13,1);
setGoto(13,11,39);
newGotoTable(14,1);
setGoto(14,10,37);
newGotoTable(15,1);
setGoto(15,9,35);
newGotoTable(16,1);
setGoto(16,8,33);
}
/* ************ */
/* STATE TABLES */
/* ************ */
static void initializeStateTables ()
{
setTables(0,0,0);
setTables(1,1,1);
setTables(2,2,2);
setTables(3,3,1);
setTables(4,4,3);
setTables(5,5,4);
setTables(6,6,5);
setTables(7,7,1);
setTables(8,8,1);
setTables(9,2,6);
setTables(10,2,7);
setTables(11,9,1);
setTables(12,2,8);
setTables(13,10,1);
setTables(14,11,1);
setTables(15,2,9);
setTables(16,2,10);
setTables(17,2,11);
setTables(18,2,12);
setTables(19,12,1);
setTables(20,13,1);
setTables(21,14,1);
setTables(22,15,1);
setTables(23,16,1);
setTables(24,17,1);
setTables(25,18,1);
setTables(26,19,13);
setTables(27,20,14);
setTables(28,21,15);
setTables(29,22,1);
setTables(30,23,16);
setTables(31,24,1);
setTables(32,25,1);
setTables(33,26,1);
setTables(34,27,1);
setTables(35,28,1);
setTables(36,29,1);
setTables(37,30,1);
setTables(38,31,1);
setTables(39,32,1);
setTables(40,33,1);
setTables(41,34,1);
setTables(42,35,1);
}
}
This file was generated on Mon Dec 20 19:03:12 PST 2004 from file CalculatorParser.java
by the ilog.language.tools.Hilite Java tool written by Hassan Aït-Kaci