📄 xpathparser.y
字号:
$$ = list; } ;/*predicate_list: predicate { List list = new ArrayList (); list.add ($1); $$ = list; } | predicate predicate_list { List list = (List) $3; list.add (0, $1); $$ = list; } ;*/axis_name: ANCESTOR { $$ = new Integer(Selector.ANCESTOR); } | ANCESTOR_OR_SELF { $$ = new Integer(Selector.ANCESTOR_OR_SELF); } | ATTRIBUTE { $$ = new Integer(Selector.ATTRIBUTE); } | CHILD { $$ = new Integer(Selector.CHILD); } | DESCENDANT { $$ = new Integer(Selector.DESCENDANT); } | DESCENDANT_OR_SELF { $$ = new Integer(Selector.DESCENDANT_OR_SELF); } | FOLLOWING { $$ = new Integer(Selector.FOLLOWING); } | FOLLOWING_SIBLING { $$ = new Integer(Selector.FOLLOWING_SIBLING); } | NAMESPACE { $$ = new Integer(Selector.NAMESPACE); } | PARENT { $$ = new Integer(Selector.PARENT); } | PRECEDING { $$ = new Integer(Selector.PRECEDING); } | PRECEDING_SIBLING { $$ = new Integer(Selector.PRECEDING_SIBLING); } | SELF { $$ = new Integer(Selector.SELF); } ;node_test: name_test /*| PROCESSING_INSTRUCTION LP LITERAL RP*/ | PROCESSING_INSTRUCTION LITERAL RP { $$ = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) $2); } /*| node_type LP RP*/ | node_type RP { $$ = new NodeTypeTest(((Short) $1).shortValue()); } ;predicate: LB expr RB { $$ = new Predicate((Expr) $2); } ;primary_expr: variable_reference | LP expr RP { $$ = new ParenthesizedExpr((Expr) $2); } | LITERAL { $$ = new Constant($1); } | number { $$ = new Constant($1); } | function_call ;function_call: function_name LP RP { $$ = lookupFunction((String) $1, Collections.EMPTY_LIST); } | function_name LP argument_list RP { $$ = lookupFunction((String) $1, (List) $3); } ;argument_list: expr { List list = new ArrayList(); list.add($1); $$ = list; } | expr COMMA argument_list { List list = (List) $3; list.add(0, $1); $$ = list; } ;union_expr: path_expr | union_expr PIPE path_expr { $$ = new UnionExpr((Expr) $1, (Expr) $3); } ;path_expr: location_path | filter_expr | filter_expr SLASH relative_location_path { Steps steps; if ($3 instanceof Steps) { steps = (Steps) $3; } else { steps = new Steps(); steps.path.addFirst($3); } steps.path.addFirst($1); $$ = steps; //$$ = new Step ((Expr) $1, (Path) $3); } | filter_expr DOUBLE_SLASH relative_location_path { Test nt = new NodeTypeTest((short) 0); Selector s = new Selector(Selector.DESCENDANT_OR_SELF, Collections.singletonList(nt)); Steps steps; if ($3 instanceof Steps) { steps = (Steps) $3; } else { steps = new Steps(); steps.path.addFirst($3); } steps.path.addFirst(s); steps.path.addFirst($1); $$ = steps; //Step step = new Step (s, (Path) $3); //$$ = new Step ((Expr) $1, step); } ;filter_expr: primary_expr | filter_expr predicate { Predicate filter = (Predicate) $2; Selector s = new Selector(Selector.SELF, Collections.singletonList(filter)); Steps steps; if ($1 instanceof Steps) { steps = (Steps) $1; } else { steps = new Steps(); steps.path.addFirst($1); } steps.path.addLast(s); $$ = steps; //$$ = new Step ((Expr) $1, s); } ;or_expr: and_expr | or_expr OR and_expr { $$ = new OrExpr((Expr) $1, (Expr) $3); } ;and_expr: equality_expr | and_expr AND equality_expr { $$ = new AndExpr((Expr) $1, (Expr) $3); } ;equality_expr: relational_expr | equality_expr EQ relational_expr { $$ = new EqualityExpr((Expr) $1, (Expr) $3, false); } | equality_expr NE relational_expr { $$ = new EqualityExpr((Expr) $1, (Expr) $3, true); } ;relational_expr: additive_expr | relational_expr LT additive_expr { $$ = new RelationalExpr((Expr) $1, (Expr) $3, true, false); } | relational_expr GT additive_expr { $$ = new RelationalExpr((Expr) $1, (Expr) $3, false, false); } | relational_expr LTE additive_expr { $$ = new RelationalExpr((Expr) $1, (Expr) $3, true, true); } | relational_expr GTE additive_expr { $$ = new RelationalExpr((Expr) $1, (Expr) $3, false, true); } ;additive_expr: multiplicative_expr | additive_expr PLUS multiplicative_expr { $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.ADD); } | additive_expr MINUS multiplicative_expr { $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.SUBTRACT); } ;multiplicative_expr: unary_expr | multiplicative_expr STAR unary_expr { $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.MULTIPLY); } | multiplicative_expr DIV unary_expr { $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.DIVIDE); } | multiplicative_expr MOD unary_expr { $$ = new ArithmeticExpr((Expr) $1, (Expr) $3, ArithmeticExpr.MODULO); } ;unary_expr: union_expr | MINUS unary_expr %prec UNARY { $$ = new NegativeExpr((Expr) $2); } ;number: DIGITS { $$ = new Double((String) $1 + ".0"); } | DIGITS DOT { $$ = new Double((String) $1 + ".0"); } | DIGITS DOT DIGITS { $$ = new Double((String) $1 + "." + (String) $3); } | DOT DIGITS { $$ = new Double("0." + (String) $2); } ;function_name: qname/* | node_type { switch (((Short) $1).shortValue ()) { case Node.COMMENT_NODE: $$ = "comment"; break; case Node.TEXT_NODE: $$ = "text"; break; case Node.PROCESSING_INSTRUCTION_NODE: $$ = "processing-instruction"; break; default: $$ = "node"; break; } }*/ ;variable_reference: DOLLAR qname { String name = (String) $2; $$ = new VariableReference(variableResolver, getQName(name)); } ;name_test: STAR { $$ = new NameTest(null, true, true); } | NAME COLON STAR { QName qName = getQName((String) $1); $$ = new NameTest(qName, true, false); } | qname { QName qName = getQName((String) $1); $$ = new NameTest(qName, false, false); } ;qname: NAME | NAME COLON NAME { $$ = (String) $1 + ':' + (String) $3; } ;node_type: COMMENT { $$ = new Short(Node.COMMENT_NODE); } | TEXT { $$ = new Short(Node.TEXT_NODE); } | PROCESSING_INSTRUCTION { $$ = new Short(Node.PROCESSING_INSTRUCTION_NODE); } | NODE { $$ = new Short((short) 0); } ;%%}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -