first commit
This commit is contained in:
commit
063194f8be
349 changed files with 36508 additions and 0 deletions
27
jasmin/jasmin-2.4/lib/java_cup/simple_calc/Main.java
Normal file
27
jasmin/jasmin-2.4/lib/java_cup/simple_calc/Main.java
Normal file
|
@ -0,0 +1,27 @@
|
|||
|
||||
public class Main {
|
||||
public static void main(String argv[])
|
||||
{
|
||||
try {
|
||||
/* allocate a parser object */
|
||||
parser parse_obj = new parser();
|
||||
|
||||
/* prompt the user */
|
||||
System.out.println("Reading expressions from standard input...");
|
||||
|
||||
/* deterimine if we doing debug or normal parse, and do it */
|
||||
if (argv.length >= 1 && argv[0].equals("-debug"))
|
||||
{
|
||||
parse_obj.debug_parse();
|
||||
}
|
||||
else
|
||||
{
|
||||
parse_obj.parse();
|
||||
}
|
||||
} catch (java.lang.Exception ex) {
|
||||
System.err.println("Exception: " + ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
};
|
58
jasmin/jasmin-2.4/lib/java_cup/simple_calc/parser.cup
Normal file
58
jasmin/jasmin-2.4/lib/java_cup/simple_calc/parser.cup
Normal file
|
@ -0,0 +1,58 @@
|
|||
// JavaCup specification for a simple expression evaluator (w/ actions)
|
||||
|
||||
import java_cup.runtime.*;
|
||||
|
||||
/* Preliminaries to set up and use the scanner. */
|
||||
init with {: scanner.init(); :};
|
||||
scan with {: return scanner.next_token(); :};
|
||||
|
||||
/* Terminals (tokens returned by the scanner). */
|
||||
terminal token SEMI, PLUS, MINUS, TIMES, DIVIDE, MOD, LPAREN, RPAREN;
|
||||
terminal int_token NUMBER;
|
||||
|
||||
/* Non terminals */
|
||||
non terminal symbol expr_list, expr_part;
|
||||
non terminal int_token expr, term, factor;
|
||||
|
||||
/* The grammar */
|
||||
expr_list ::= expr_list expr_part
|
||||
|
|
||||
expr_part;
|
||||
|
||||
expr_part ::= expr:e
|
||||
{: System.out.println("= " + e.int_val); :}
|
||||
SEMI
|
||||
;
|
||||
|
||||
expr ::= expr:e1 PLUS term:e2
|
||||
{: RESULT.int_val = e1.int_val + e2.int_val; :}
|
||||
|
|
||||
expr:e1 MINUS term:e2
|
||||
{: RESULT.int_val = e1.int_val - e2.int_val; :}
|
||||
|
|
||||
term:e1
|
||||
{: RESULT.int_val = e1.int_val; :}
|
||||
;
|
||||
|
||||
term ::= term:e1 TIMES factor:e2
|
||||
{: RESULT.int_val = e1.int_val * e2.int_val; :}
|
||||
|
|
||||
term:e1 DIVIDE factor:e2
|
||||
{: RESULT.int_val = e1.int_val / e2.int_val; :}
|
||||
|
|
||||
term:e1 MOD factor:e2
|
||||
{: RESULT.int_val = e1.int_val % e2.int_val; :}
|
||||
|
|
||||
factor:e
|
||||
{: RESULT.int_val = e.int_val; :}
|
||||
;
|
||||
|
||||
factor ::= NUMBER:n
|
||||
{: RESULT.int_val = n.int_val; :}
|
||||
|
|
||||
MINUS factor:e
|
||||
{: RESULT.int_val = -e.int_val; :}
|
||||
|
|
||||
LPAREN expr:e RPAREN
|
||||
{: RESULT.int_val = e.int_val; :}
|
||||
;
|
287
jasmin/jasmin-2.4/lib/java_cup/simple_calc/parser.java
Normal file
287
jasmin/jasmin-2.4/lib/java_cup/simple_calc/parser.java
Normal file
|
@ -0,0 +1,287 @@
|
|||
|
||||
//----------------------------------------------------
|
||||
// The following code was generated by Java(tm) CUP v0.9d
|
||||
// Sun Jan 07 17:10:11 EST 1996
|
||||
//----------------------------------------------------
|
||||
|
||||
import java_cup.runtime.*;
|
||||
|
||||
public class parser extends java_cup.runtime.lr_parser {
|
||||
|
||||
/** constructor */
|
||||
public parser() {super();}
|
||||
|
||||
/** production table */
|
||||
protected static final short _production_table[][] = {
|
||||
{1, 2}, {0, 2}, {1, 1}, {6, 0}, {2, 3},
|
||||
{3, 3}, {3, 3}, {3, 1}, {4, 3}, {4, 3},
|
||||
{4, 3}, {4, 1}, {5, 1}, {5, 2}, {5, 3}
|
||||
};
|
||||
|
||||
/** access to production table */
|
||||
public short[][] production_table() {return _production_table;}
|
||||
|
||||
/** parse action table */
|
||||
protected static final short[][] _action_table = {
|
||||
/*0*/{4,2,8,9,10,4,-1,0},
|
||||
/*1*/{4,2,8,9,10,4,-1,0},
|
||||
/*2*/{2,-12,3,-12,4,-12,5,-12,6,-12,7,-12,9,-12,-1,0},
|
||||
/*3*/{2,-13,3,-13,4,-13,5,-13,6,-13,7,-13,9,-13,-1,0},
|
||||
/*4*/{0,-3,4,-3,8,-3,10,-3,-1,0},
|
||||
/*5*/{2,-4,3,13,4,11,-1,0},
|
||||
/*6*/{0,23,4,2,8,9,10,4,-1,0},
|
||||
/*7*/{2,-8,3,-8,4,-8,5,16,6,17,7,15,9,-8,-1,0},
|
||||
/*8*/{4,2,8,9,10,4,-1,0},
|
||||
/*9*/{3,13,4,11,9,12,-1,0},
|
||||
/*10*/{4,2,8,9,10,4,-1,0},
|
||||
/*11*/{2,-15,3,-15,4,-15,5,-15,6,-15,7,-15,9,-15,-1,0},
|
||||
/*12*/{4,2,8,9,10,4,-1,0},
|
||||
/*13*/{2,-6,3,-6,4,-6,5,16,6,17,7,15,9,-6,-1,0},
|
||||
/*14*/{4,2,8,9,10,4,-1,0},
|
||||
/*15*/{4,2,8,9,10,4,-1,0},
|
||||
/*16*/{4,2,8,9,10,4,-1,0},
|
||||
/*17*/{2,-10,3,-10,4,-10,5,-10,6,-10,7,-10,9,-10,-1,0},
|
||||
/*18*/{2,-9,3,-9,4,-9,5,-9,6,-9,7,-9,9,-9,-1,0},
|
||||
/*19*/{2,-11,3,-11,4,-11,5,-11,6,-11,7,-11,9,-11,-1,0},
|
||||
/*20*/{2,-7,3,-7,4,-7,5,16,6,17,7,15,9,-7,-1,0},
|
||||
/*21*/{0,-1,4,-1,8,-1,10,-1,-1,0},
|
||||
/*22*/{0,-2,-1,0},
|
||||
/*23*/{2,25,-1,0},
|
||||
/*24*/{0,-5,4,-5,8,-5,10,-5,-1,0},
|
||||
/*25*/{2,-14,3,-14,4,-14,5,-14,6,-14,7,-14,9,-14,-1,0},
|
||||
};
|
||||
|
||||
/** access to parse action table */
|
||||
public short[][] action_table() {return _action_table;}
|
||||
|
||||
/** reduce_goto table */
|
||||
protected static final short[][] _reduce_table = {
|
||||
/*0*/{1,6,2,4,3,5,4,7,5,2,-1,-1},
|
||||
/*1*/{5,25,-1,-1},
|
||||
/*2*/{-1,-1},
|
||||
/*3*/{-1,-1},
|
||||
/*4*/{-1,-1},
|
||||
/*5*/{6,23,-1,-1},
|
||||
/*6*/{2,21,3,5,4,7,5,2,-1,-1},
|
||||
/*7*/{-1,-1},
|
||||
/*8*/{3,9,4,7,5,2,-1,-1},
|
||||
/*9*/{-1,-1},
|
||||
/*10*/{4,20,5,2,-1,-1},
|
||||
/*11*/{-1,-1},
|
||||
/*12*/{4,13,5,2,-1,-1},
|
||||
/*13*/{-1,-1},
|
||||
/*14*/{5,19,-1,-1},
|
||||
/*15*/{5,18,-1,-1},
|
||||
/*16*/{5,17,-1,-1},
|
||||
/*17*/{-1,-1},
|
||||
/*18*/{-1,-1},
|
||||
/*19*/{-1,-1},
|
||||
/*20*/{-1,-1},
|
||||
/*21*/{-1,-1},
|
||||
/*22*/{-1,-1},
|
||||
/*23*/{-1,-1},
|
||||
/*24*/{-1,-1},
|
||||
/*25*/{-1,-1},
|
||||
};
|
||||
|
||||
/** access to reduce_goto table */
|
||||
public short[][] reduce_table() {return _reduce_table;}
|
||||
|
||||
/** instance of action encapsulation class */
|
||||
protected CUP$actions action_obj;
|
||||
|
||||
/** action encapsulation object initializer */
|
||||
protected void init_actions()
|
||||
{
|
||||
action_obj = new CUP$actions();
|
||||
}
|
||||
|
||||
/** invoke a user supplied parse action */
|
||||
public java_cup.runtime.symbol do_action(
|
||||
int act_num,
|
||||
java_cup.runtime.lr_parser parser,
|
||||
java.util.Stack stack,
|
||||
int top)
|
||||
throws java.lang.Exception
|
||||
{
|
||||
/* call code in generated class */
|
||||
return action_obj.CUP$do_action(act_num, parser, stack, top);
|
||||
}
|
||||
|
||||
/** start state */
|
||||
public int start_state() {return 0;}
|
||||
/** start production */
|
||||
public int start_production() {return 1;}
|
||||
|
||||
/** EOF symbol index */
|
||||
public int EOF_sym() {return 0;}
|
||||
|
||||
/** error symbol index */
|
||||
public int error_sym() {return 1;}
|
||||
|
||||
|
||||
/** user initialization */
|
||||
public void user_init() throws java.lang.Exception
|
||||
{
|
||||
scanner.init();
|
||||
}
|
||||
|
||||
/** scan to get the next token */
|
||||
public java_cup.runtime.token scan()
|
||||
throws java.lang.Exception
|
||||
{
|
||||
return scanner.next_token();
|
||||
}
|
||||
};
|
||||
|
||||
/** JavaCup generated class to encapsulate user supplied action code.*/
|
||||
class CUP$actions {
|
||||
|
||||
/** Constructor */
|
||||
CUP$actions() { }
|
||||
|
||||
/** Method with the actual generated action code. */
|
||||
public final java_cup.runtime.symbol CUP$do_action(
|
||||
int CUP$act_num,
|
||||
java_cup.runtime.lr_parser CUP$parser,
|
||||
java.util.Stack CUP$stack,
|
||||
int CUP$top)
|
||||
throws java.lang.Exception
|
||||
{
|
||||
/* object for return from actions */
|
||||
java_cup.runtime.symbol CUP$result;
|
||||
|
||||
/* select the action based on the action number */
|
||||
switch (CUP$act_num)
|
||||
{
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 14: // factor ::= LPAREN expr RPAREN
|
||||
{
|
||||
CUP$result = new int_token(/*factor*/5);
|
||||
((int_token)CUP$result).int_val = (/*e*/(int_token)CUP$stack.elementAt(CUP$top-1)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 13: // factor ::= MINUS factor
|
||||
{
|
||||
CUP$result = new int_token(/*factor*/5);
|
||||
((int_token)CUP$result).int_val = -(/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 12: // factor ::= NUMBER
|
||||
{
|
||||
CUP$result = new int_token(/*factor*/5);
|
||||
((int_token)CUP$result).int_val = (/*n*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 11: // term ::= factor
|
||||
{
|
||||
CUP$result = new int_token(/*term*/4);
|
||||
((int_token)CUP$result).int_val = (/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 10: // term ::= term MOD factor
|
||||
{
|
||||
CUP$result = new int_token(/*term*/4);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val % (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 9: // term ::= term DIVIDE factor
|
||||
{
|
||||
CUP$result = new int_token(/*term*/4);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val / (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 8: // term ::= term TIMES factor
|
||||
{
|
||||
CUP$result = new int_token(/*term*/4);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val * (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 7: // expr ::= term
|
||||
{
|
||||
CUP$result = new int_token(/*expr*/3);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 6: // expr ::= expr MINUS term
|
||||
{
|
||||
CUP$result = new int_token(/*expr*/3);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val - (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 5: // expr ::= expr PLUS term
|
||||
{
|
||||
CUP$result = new int_token(/*expr*/3);
|
||||
((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val + (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val;
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 4: // expr_part ::= expr NT$0 SEMI
|
||||
{
|
||||
CUP$result = new symbol(/*expr_part*/2);
|
||||
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 3: // NT$0 ::=
|
||||
{
|
||||
CUP$result = new java_cup.runtime.token(/*NT$0*/6);
|
||||
System.out.println("= " + (/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val);
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 2: // expr_list ::= expr_part
|
||||
{
|
||||
CUP$result = new symbol(/*expr_list*/1);
|
||||
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 1: // $START ::= expr_list EOF
|
||||
{
|
||||
CUP$result = new java_cup.runtime.token(/*$START*/0);
|
||||
|
||||
}
|
||||
/* ACCEPT */
|
||||
CUP$parser.done_parsing();
|
||||
return CUP$result;
|
||||
|
||||
/*. . . . . . . . . . . . . . . . . . . .*/
|
||||
case 0: // expr_list ::= expr_list expr_part
|
||||
{
|
||||
CUP$result = new symbol(/*expr_list*/1);
|
||||
|
||||
}
|
||||
return CUP$result;
|
||||
|
||||
/* . . . . . .*/
|
||||
default:
|
||||
throw new Exception(
|
||||
"Invalid action number found in internal parse table");
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
51
jasmin/jasmin-2.4/lib/java_cup/simple_calc/scanner.java
Normal file
51
jasmin/jasmin-2.4/lib/java_cup/simple_calc/scanner.java
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Simple Example Scanner Class
|
||||
|
||||
import java_cup.runtime.*;
|
||||
|
||||
public class scanner {
|
||||
/* single lookahead character */
|
||||
protected static int next_char;
|
||||
|
||||
/* advance input by one character */
|
||||
protected static void advance() throws java.io.IOException
|
||||
{
|
||||
next_char = System.in.read();
|
||||
}
|
||||
|
||||
/* initialize the scanner */
|
||||
public static void init() throws java.io.IOException { advance(); }
|
||||
|
||||
/* recognize and return the next complete token */
|
||||
public static token next_token() throws java.io.IOException
|
||||
{
|
||||
for (;;)
|
||||
switch (next_char)
|
||||
{
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
/* parse a decimal integer */
|
||||
int i_val = 0;
|
||||
do {
|
||||
i_val = i_val * 10 + (next_char - '0');
|
||||
advance();
|
||||
} while (next_char >= '0' && next_char <= '9');
|
||||
return new int_token(sym.NUMBER, i_val);
|
||||
|
||||
case ';': advance(); return new token(sym.SEMI);
|
||||
case '+': advance(); return new token(sym.PLUS);
|
||||
case '-': advance(); return new token(sym.MINUS);
|
||||
case '*': advance(); return new token(sym.TIMES);
|
||||
case '/': advance(); return new token(sym.DIVIDE);
|
||||
case '%': advance(); return new token(sym.MOD);
|
||||
case '(': advance(); return new token(sym.LPAREN);
|
||||
case ')': advance(); return new token(sym.RPAREN);
|
||||
|
||||
case -1: return new token(sym.EOF);
|
||||
|
||||
default:
|
||||
/* in this simple scanner we just ignore everything else */
|
||||
advance();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
22
jasmin/jasmin-2.4/lib/java_cup/simple_calc/sym.java
Normal file
22
jasmin/jasmin-2.4/lib/java_cup/simple_calc/sym.java
Normal file
|
@ -0,0 +1,22 @@
|
|||
|
||||
//----------------------------------------------------
|
||||
// The following code was generated by Java(tm) CUP v0.9d
|
||||
// Sun Jan 07 17:10:10 EST 1996
|
||||
//----------------------------------------------------
|
||||
|
||||
/** JavaCup generated class containing symbol constants. */
|
||||
public class sym {
|
||||
/* terminals */
|
||||
static final int SEMI = 2;
|
||||
static final int EOF = 0;
|
||||
static final int DIVIDE = 6;
|
||||
static final int NUMBER = 10;
|
||||
static final int error = 1;
|
||||
static final int MINUS = 4;
|
||||
static final int TIMES = 5;
|
||||
static final int LPAREN = 8;
|
||||
static final int RPAREN = 9;
|
||||
static final int MOD = 7;
|
||||
static final int PLUS = 3;
|
||||
};
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue