📄 senseparser.java
字号:
public String errorMsg = "no errors"; private boolean errorSet = false; public void report_error(String message, Object info) { Symbol cur_token = (Symbol) info; //System.out.println("errorMsg = " + errorMsg); //System.out.println("cur_token.sym = " + cur_token.sym); if (message.equals("Syntax error")) { if (cur_token.sym == 0) errorMsg = "Bad Syntax - Possibly missing clause"; else errorMsg = "Syntax error at " + cur_token.value; errorSet = true; } if (!errorSet) { errorMsg = "Can't parse query string"; } System.out.println("errorMsg = " + errorMsg); } public void syntax_error(Symbol cur_token) { report_error("Syntax error", cur_token); }
}
/** Cup generated class to encapsulate user supplied action code.*/
class CUP$senseParser$actions {
byte queryId = 1; int epochDur = 1024; TinyDBQuery tinyDBQuery = new TinyDBQuery(queryId, epochDur); Vector aggFields = new Vector(); Vector selList = new Vector(); HashMap fields = new HashMap(); Vector conds = new Vector(); Vector eventParams = new Vector(); short fieldIndex = 0; short groupIdx = -1; String catalogTableName = null; Catalog catalog = Catalog.curCatalog; class ArithExpressionClass { String fieldOp; short fieldConstant; FieldInfo finf; boolean isAttr; } class AggField { AggOp fieldOp; ArithExpressionClass fieldData; } class FieldInfo { boolean isAgg; AggField af; QueryField qf; } class SelStmt { SelOp op; ArithExpressionClass aexp; short c; short c2; short c3; String s; } public QueryField getQueryField(String column, byte aggOp, short fid) { QueryField qf = null; String hashKey = column + aggOp; if (fields.get(hashKey) == null) { //we can't verify that this is a valid query field just yet, //since we don't know the source table qf = new QueryField(column, QueryField.UNKNOWN_TYPE); qf.setIdx(fid); qf.setOp(aggOp); fields.put(hashKey, qf); //System.out.println("ADDED FIELD : " + column); //tinyDBQuery.addField(qf); } else qf = (QueryField) fields.get(hashKey); return qf; } public QueryField getQueryField(String column, byte aggOp) { String hashKey = column + aggOp; if (fields.get(hashKey) != null) return ((QueryField)fields.get(hashKey)); else return getQueryField(column, aggOp, fieldIndex++); } public short removeField(String name, byte aggOp) { String hashKey = name + aggOp; //System.out.println("IN REMOVEFIELD: " + name + " ,OP " + aggOp); QueryField qf = (QueryField)fields.get(hashKey); if (qf != null) { fields.remove(hashKey); return qf.getIdx(); } else return 0xFF; } public boolean validEpochDur(int epochDur) { return (epochDur > 64 && epochDur < 700000); }
private final senseParser parser;
/** Constructor */
CUP$senseParser$actions(senseParser parser) {
this.parser = parser;
}
/** Method with the actual generated action code. */
public final java_cup.runtime.Symbol CUP$senseParser$do_action(
int CUP$senseParser$act_num,
java_cup.runtime.lr_parser CUP$senseParser$parser,
java.util.Stack CUP$senseParser$stack,
int CUP$senseParser$top)
throws java.lang.Exception
{
/* Symbol object for return from actions */
java_cup.runtime.Symbol CUP$senseParser$result;
/* select the action based on the action number */
switch (CUP$senseParser$act_num)
{
/*. . . . . . . . . . . . . . . . . . . .*/
case 65: // arith_expr ::= attr
{
Object RESULT = null;
int aleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).left; int aright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right; FieldInfo a = (FieldInfo)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).value; // e.g. light ArithExpressionClass exp = new ArithExpressionClass(); exp.isAttr = true; exp.finf = a; RESULT = exp;
CUP$senseParser$result = new java_cup.runtime.Symbol(18/*arith_expr*/, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, RESULT);
}
return CUP$senseParser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
case 64: // arith_expr ::= LPAREN attr ARITHMETIC_OP CONSTANT RPAREN
{
Object RESULT = null;
int aleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).left; int aright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).right; FieldInfo a = (FieldInfo)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).value; int arithOpleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).left; int arithOpright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).right; String arithOp = (String)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).value; int arithConstleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).left; int arithConstright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).right; Integer arithConst = (Integer)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).value; // e.g. (light * 20) ArithExpressionClass exp = new ArithExpressionClass(); //if (a.qf.getType() == QueryField.STRING) { // SensorQueryer.errorMessage = "Arithmetic operations not supported on STRING fields"; // // return null; //} exp.finf = a; exp.fieldOp = arithOp; exp.fieldConstant = arithConst.shortValue(); exp.isAttr = false; RESULT = exp;
CUP$senseParser$result = new java_cup.runtime.Symbol(18/*arith_expr*/, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-4)).left, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, RESULT);
}
return CUP$senseParser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
case 63: // arith_expr ::= attr ARITHMETIC_OP CONSTANT
{
Object RESULT = null;
int aleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).left; int aright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).right; FieldInfo a = (FieldInfo)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).value; int arithOpleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).left; int arithOpright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).right; String arithOp = (String)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).value; int arithConstleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).left; int arithConstright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right; Integer arithConst = (Integer)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).value; // e.g. light * 20 ArithExpressionClass exp = new ArithExpressionClass(); //if (a.qf.getType() == QueryField.STRING) { // SensorQueryer.errorMessage = "Arithmetic operations not supported on STRING fields"; // return null; //} exp.finf = a; exp.fieldOp = arithOp; exp.fieldConstant = arithConst.shortValue(); exp.isAttr = false; RESULT = exp;
CUP$senseParser$result = new java_cup.runtime.Symbol(18/*arith_expr*/, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, RESULT);
}
return CUP$senseParser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
case 62: // action_stat ::=
{
Object RESULT = null;
CUP$senseParser$result = new java_cup.runtime.Symbol(16/*action_stat*/, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, RESULT);
}
return CUP$senseParser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
case 61: // action_stat ::= ACTION NAME LPAREN CONSTANT RPAREN
{
Object RESULT = null;
int nleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).left; int nright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).right; String n = (String)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-3)).value; int cleft = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).left; int cright = ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).right; Integer c = (Integer)((java_cup.runtime.Symbol) CUP$senseParser$stack.elementAt(CUP$senseParser$top-1)).value; //System.out.println("NAME: " + n); tinyDBQuery.setOutputCommand(n, c.shortValue());
CUP$senseParser$result = new java_cup.runtime.Symbol(16/*action_stat*/, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-4)).left, ((java_cup.runtime.Symbol)CUP$senseParser$stack.elementAt(CUP$senseParser$top-0)).right, RESULT);
}
return CUP$senseParser$result;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -