Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * JavaCC template file created by SF JavaCC plugin 1.5.17+ wizard for JavaCC 1.5.0+
- */
- options
- {
- JDK_VERSION = "1.5";
- static = true;
- }
- PARSER_BEGIN(eg1)
- import java.util.*;
- public class eg1
- {
- static Stack st;
- public static void main(String args []) throws ParseException
- {
- st=new Stack();
- eg1 parser = new eg1(System.in);
- while (true)
- {
- try
- {
- //System.out.print("Write a valid variable: ");
- //eg1.input();
- //System.out.println("Variable is valid.");
- System.out.print("Write an expression: ");
- eg1.calc();
- for(int i=0;i<st.size();i++){
- System.out.println(st.get(i));
- }
- }catch(Exception e)
- {
- System.out.println("Variable not valid");
- }
- }
- }
- }
- PARSER_END(eg1)
- SKIP :
- {
- " "
- | "\r"
- | "\t"
- | "\n"
- }
- TOKEN : /* KEYWORDS */
- {
- < PLUS : "+" >
- | < MINUS : "-" >
- | < MULTIPLY : "*" >
- | < DIVIDE : "/" >
- | < EQUALS : "=" >
- | < TYPE : "BYTE" | "SHORT" | "INT" | "LONG" | "FLOAT" | "DOUBLE" | "BOOLEAN" | "CHAR" >
- | < EOS : ";" >
- }
- /* LITERALS */
- TOKEN :
- {
- < INTEGER_LITERAL:
- <DECIMAL_LITERAL> (["l","L"])?
- | <HEX_LITERAL> (["l","L"])?
- | <OCTAL_LITERAL> (["l","L"])?
- >
- |
- < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
- |
- < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
- |
- < #OCTAL_LITERAL: "0" (["0"-"7"])* >
- |
- < FLOATING_POINT_LITERAL:
- <DECIMAL_FLOATING_POINT_LITERAL>
- | <HEXADECIMAL_FLOATING_POINT_LITERAL>
- >
- |
- < #DECIMAL_FLOATING_POINT_LITERAL:
- (["0"-"9"])+ "." (["0"-"9"])* (<DECIMAL_EXPONENT>)? (["f","F","d","D"])?
- | "." (["0"-"9"])+ (<DECIMAL_EXPONENT>)? (["f","F","d","D"])?
- | (["0"-"9"])+ <DECIMAL_EXPONENT> (["f","F","d","D"])?
- | (["0"-"9"])+ (<DECIMAL_EXPONENT>)? ["f","F","d","D"]
- >
- |
- < #DECIMAL_EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
- |
- < #HEXADECIMAL_FLOATING_POINT_LITERAL:
- "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])+ (".")? <HEXADECIMAL_EXPONENT> (["f","F","d","D"])?
- | "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])* "." (["0"-"9","a"-"f","A"-"F"])+ <HEXADECIMAL_EXPONENT> (["f","F","d","D"])?
- >
- |
- < #HEXADECIMAL_EXPONENT: ["p","P"] (["+","-"])? (["0"-"9"])+ >
- |
- < CHARACTER_LITERAL:
- "'"
- ( (~["'","\\","\n","\r"])
- | ("\\"
- ( ["n","t","b","r","f","\\","'","\""]
- | ["0"-"7"] ( ["0"-"7"] )?
- | ["0"-"3"] ["0"-"7"] ["0"-"7"]
- )
- )
- )
- "'"
- >
- |
- < STRING_LITERAL:
- "\""
- ( (~["\"","\\","\n","\r"])
- | ("\\"
- ( ["n","t","b","r","f","\\","'","\""]
- | ["0"-"7"] ( ["0"-"7"] )?
- | ["0"-"3"] ["0"-"7"] ["0"-"7"]
- )
- )
- )*
- "\""
- >
- }
- TOKEN :
- {
- < IDENTIFIER : ["a"-"z","A"-"Z","_"] ( ["a"-"z","A"-"Z","0"-"9","_"] )* >
- }
- /*FOR EXPRESSION HANDLING */
- void input() :
- {
- Token t1; String name;
- Token t2; String type;
- }
- {
- t1=< TYPE >
- {type=t1.image.toString();}
- {System.out.println("type="+type); }
- t2=<IDENTIFIER>
- < EOS >
- {name=t2.image.toString();}
- {System.out.println("variable name="+name); }
- }
- int calc() :
- {}
- {
- sum() ";"
- {
- return 0;
- }
- |
- ";"
- {
- return 1;
- }
- }
- void sum() :
- {Token t;}
- {
- term()
- (
- (
- t=< PLUS >{st.add(t.image);}
- | t=< MINUS > {st.add(t.image);}
- )
- term()
- )*
- }
- void term() :
- {Token t;}
- {
- unary()
- (
- (
- t=< MULTIPLY > {st.add(t.image);}
- | t=< DIVIDE > {st.add(t.image);}
- )
- unary()
- )*
- }
- void unary() :
- {Token t;}
- {
- t=< MINUS >
- {st.add(t.image); } element()
- | element()
- }
- void element() :
- {Token t;}
- {
- t=< INTEGER_LITERAL >
- {
- st.add(t.image);
- }
- | < IDENTIFIER >
- | "(" sum() ")"
- }
Add Comment
Please, Sign In to add comment