/* adder.jj Adding up numbers */ options { STATIC = false ; } PARSER_BEGIN(SQLEngine) import java.io.FileInputStream; import java.io.FileNotFoundException; public class SQLEngine { public static void main( String[] args ) throws ParseException, TokenMgrError, FileNotFoundException { SQLEngine parser = new SQLEngine( new FileInputStream(args[0] )) ; parser.SQLStatement() ; } private void jjtreeOpenNodeScope( Node node ) { ((SimpleNode)node).first_token = getToken(1); } private void jjtreeCloseNodeScope( Node node ) { ((SimpleNode)node).last_token = getToken(0); } public Node getRootNode(){ return jjtree.rootNode(); } } PARSER_END(SQLEngine) /*********************************************************************** * Token definitions ***********************************************************************/ /* There may be tokens here which don't relate to SQL, but we needed for the rest of our project [Kevin] */ SKIP: { " " | "\n" | "\r" | "\t" } SKIP: { } SKIP: { } TOKEN: /* Keywords */ { < ALL: "all" > | < AND: "and" > | < AS: "as" > | < ASC: "asc" > | < BEGIN: "begin" > | < BETWEEN: "between" > | < BY: "by" > | < CUSTOM: "custom" > | < DESC: "desc" > | < DISTINCT: "distinct" > | < FROM: "from" > | < GROUP: "group" > | < HAVING: "having" > | < IN: "in" > | < IS: "is" > | < LIKE: "like" > | < NOT: "not" > | < NULL: "null" > | < OR: "or" > | < ORDER: "order" > | < SELECT: "select" > | < UNION: "union" > | < SPACES: "spaces" > | < TABLES: "tables" > | < WHERE: "where" > //*************************************************************************************** | < DELETE: "delete" > | < EXISTS: "exists" > | < INSERT: "insert" > | < INTO: "into" > | < SET: "set" > | < UPDATE: "update" > | < VALUES: "values" > } TOKEN: /* Literals */ { < INTEGER_LITERAL: (["0"-"9"])+ > | < FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])+ ()? | "." (["0"-"9"])+ ()? | (["0"-"9"])+ | (["0"-"9"])+ ()? > | < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > | < STRING_LITERAL: "'" (~["'"])* ( "''" (~["'"])* )* "'" > } TOKEN: /* Identifiers */ { < ID: ( )+ ( "_" | "$" | "#" | | )* > | < #LETTER: ["A"-"Z", "a"-"z"] > | < #DIGIT: ["0"-"9"] > } TOKEN: /* Separators and operators */ { < ASSIGN: ":=" > | < CONCAT: "||" > | < SEMICOLON: ";" > | < DOT: "." > | < TILDE: "~" > | < LESS: "<" > | < LESSEQUAL: "<=" > | < GREATER: ">" > | < GREATEREQUAL: ">=" > | < EQUAL: "=" > | < NOTEQUAL: "!=" > | < NOTEQUAL2: "<>" > | < JOINPLUS: "(+)" > | < OPENPAREN: "(" > | < CLOSEPAREN: ")" > | < ASTERISK: "*" > | < SLASH: "/" > | < PLUS: "+" > | < MINUS: "-" > | < QUESTIONMARK: "?" > | | | | | | | > } void SQLAndExpr() : {} { SQLNotExpr() ( SQLNotExpr() )* } void SQLBetweenClause() : {} { [ ] SQLSumExpr() SQLSumExpr() } void SQLColRef() : { } { SQLLvalue() } void SQLCompareExpr() : { } { ( LOOKAHEAD (SQLSelect()) SQLSelect() | LOOKAHEAD (SQLColRef() ) SQLIsClause() | LOOKAHEAD () SQLExistsClause() | SQLSumExpr() [ SQLCompareExprRight() ] ) } void SQLCompareExprRight() : {} { ( LOOKAHEAD(2) SQLLikeClause() | LOOKAHEAD(2) SQLInClause() | SQLLeftJoinClause() | LOOKAHEAD(SQLCompareOp() SQLSumExpr() "(+)") SQLRightJoinClause() | LOOKAHEAD(2) SQLBetweenClause() | SQLCompareOp() SQLSumExpr() ) } void SQLCompareOp() : {} { ( | | | | | | ) } void SQLCustom() : {} { SQLTableList() SQLFunctionArgs() } void SQLDelete() : {} { SQLTableList() [ SQLWhere() ] } void SQLExistsClause() : {} { "(" SQLSelect() ")" } void SQLFunction() : {} { SQLFunctionArgs() } void SQLFunctionArgs() : {} { "(" [ SQLSumExpr() ( "," SQLSumExpr() )* ] ")" } void SQLGroupBy() : {} { SQLOrderByList() } void SQLInClause() : {} { [ ] "(" SQLLValueList() ")" } void SQLInsert() : {} { SQLTableList() [ "(" SQLSelectCols() ")" ] "(" SQLSelectCols() ")" } void SQLIsClause() : {} { SQLColRef() [ ] } void SQLLeftJoinClause() : { } { "(+)" SQLCompareOp() SQLSumExpr() } void SQLLikeClause() : {} { [ ] SQLPattern() } void SQLLiteral() : { } { ( | | | | ) } void SQLLvalue() : { } { ( SQLLvalueTerm() ) } void SQLLvalueTerm() : { } { ( )* } void SQLNotExpr() : {} { [ ] SQLCompareExpr() } void SQLOrderBy() : {} { SQLOrderByList() } void SQLOrderByElem() : {} { SQLColRef() [ SQLOrderDirection()] } void SQLOrderByList() : {} { SQLOrderByElem() ( LOOKAHEAD(2) "," SQLOrderByElem() )* } void SQLOrderDirection() : {} { ( | ) } void SQLOrExpr() : {} { SQLAndExpr() ( SQLAndExpr() )* } void SQLPattern() : { } { ( | "?" | SQLLvalue() ) } void SQLProductExpr() : {} { SQLUnaryExpr() ( ( "*" | "/" ) SQLUnaryExpr())* } void SQLRightJoinClause() : { } { SQLCompareOp() SQLSumExpr() "(+)" } void SQLUnion() : {} { ( SQLTableRef() | SQLSelect() ) ( SQLTableRef() | SQLSelect() ) } void SQLSelect() : {} {