aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/xml/xpath/XPathParser.y
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/xml/xpath/XPathParser.y')
-rw-r--r--libjava/gnu/xml/xpath/XPathParser.y782
1 files changed, 0 insertions, 782 deletions
diff --git a/libjava/gnu/xml/xpath/XPathParser.y b/libjava/gnu/xml/xpath/XPathParser.y
deleted file mode 100644
index f8a60363b7f..00000000000
--- a/libjava/gnu/xml/xpath/XPathParser.y
+++ /dev/null
@@ -1,782 +0,0 @@
-%{
-/* XPathParser.java -- An XPath 1.0 parser.
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathFunctionResolver;
-import javax.xml.xpath.XPathVariableResolver;
-import org.w3c.dom.Node;
-
-/**
- * An XPath 1.0 parser.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class XPathParser
-{
-
- NamespaceContext namespaceContext;
- XPathVariableResolver variableResolver;
- XPathFunctionResolver functionResolver;
-
- QName getQName(String name)
- {
- QName qName = QName.valueOf(name);
- if (namespaceContext != null)
- {
- String prefix = qName.getPrefix();
- String uri = qName.getNamespaceURI();
- if (prefix != null && (uri == null || uri.length() == 0))
- {
- uri = namespaceContext.getNamespaceURI(prefix);
- String localName = qName.getLocalPart();
- qName = new QName(uri, localName, prefix);
- }
- }
- return qName;
- }
-
- Expr lookupFunction(String name, List args)
- {
- int arity = args.size();
- if ("position".equals(name) && arity == 0)
- {
- return new PositionFunction();
- }
- else if ("last".equals(name) && arity == 0)
- {
- return new LastFunction();
- }
- else if ("string".equals(name) && (arity == 1 || arity == 0))
- {
- return new StringFunction(args);
- }
- else if ("number".equals(name) && (arity == 1 || arity == 0))
- {
- return new NumberFunction(args);
- }
- else if ("boolean".equals(name) && arity == 1)
- {
- return new BooleanFunction(args);
- }
- else if ("count".equals(name) && arity == 1)
- {
- return new CountFunction(args);
- }
- else if ("not".equals(name) && arity == 1)
- {
- return new NotFunction(args);
- }
- else if ("id".equals(name) && arity == 1)
- {
- return new IdFunction(args);
- }
- else if ("concat".equals(name) && arity > 1)
- {
- return new ConcatFunction(args);
- }
- else if ("true".equals(name) && arity == 0)
- {
- return new TrueFunction();
- }
- else if ("false".equals(name) && arity == 0)
- {
- return new FalseFunction();
- }
- else if ("name".equals(name) && (arity == 1 || arity == 0))
- {
- return new NameFunction(args);
- }
- else if ("local-name".equals(name) && (arity == 1 || arity == 0))
- {
- return new LocalNameFunction(args);
- }
- else if ("namespace-uri".equals(name) && (arity == 1 || arity == 0))
- {
- return new NamespaceUriFunction(args);
- }
- else if ("starts-with".equals(name) && arity == 2)
- {
- return new StartsWithFunction(args);
- }
- else if ("contains".equals(name) && arity == 2)
- {
- return new ContainsFunction(args);
- }
- else if ("string-length".equals(name) && (arity == 1 || arity == 0))
- {
- return new StringLengthFunction(args);
- }
- else if ("translate".equals(name) && arity == 3)
- {
- return new TranslateFunction(args);
- }
- else if ("normalize-space".equals(name) && (arity == 1 || arity == 0))
- {
- return new NormalizeSpaceFunction(args);
- }
- else if ("substring".equals(name) && (arity == 2 || arity == 3))
- {
- return new SubstringFunction(args);
- }
- else if ("substring-before".equals(name) && arity == 2)
- {
- return new SubstringBeforeFunction(args);
- }
- else if ("substring-after".equals(name) && arity == 2)
- {
- return new SubstringAfterFunction(args);
- }
- else if ("lang".equals(name) && arity == 1)
- {
- return new LangFunction(args);
- }
- else if ("sum".equals(name) && arity == 1)
- {
- return new SumFunction(args);
- }
- else if ("floor".equals(name) && arity == 1)
- {
- return new FloorFunction(args);
- }
- else if ("ceiling".equals(name) && arity == 1)
- {
- return new CeilingFunction(args);
- }
- else if ("round".equals(name) && arity == 1)
- {
- return new RoundFunction(args);
- }
- else if (functionResolver != null)
- {
- QName qName = QName.valueOf(name);
- Object function = functionResolver.resolveFunction(qName, arity);
- if (function != null &&
- function instanceof Function &&
- function instanceof Expr)
- {
- Function f = (Function) function;
- f.setArguments(args);
- return (Expr) function;
- }
- }
- return new FunctionCall(functionResolver, name, args);
- }
-
-%}
-
-%token LITERAL
-%token DIGITS
-%token NAME
-
-%token LP // '('
-%token RP // ')'
-%token LB // '['
-%token RB // ']'
-%token COMMA // ','
-%token PIPE // '|'
-%token SLASH // '/'
-%token DOUBLE_SLASH // '//'
-%token EQ // '='
-%token NE // '!='
-%token GT // '>'
-%token LT // '<'
-%token GTE // '>='
-%token LTE // '<='
-%token PLUS // '+'
-%token MINUS // '-'
-%token AT // '@'
-%token STAR // '*'
-%token DOLLAR // '$'
-%token COLON // ':'
-%token DOUBLE_COLON // '::'
-%token DOT // '.'
-%token DOUBLE_DOT // '..'
-
-%token ANCESTOR
-%token ANCESTOR_OR_SELF
-%token ATTRIBUTE
-%token CHILD
-%token DESCENDANT
-%token DESCENDANT_OR_SELF
-%token FOLLOWING
-%token FOLLOWING_SIBLING
-%token NAMESPACE
-%token PARENT
-%token PRECEDING
-%token PRECEDING_SIBLING
-%token SELF
-%token DIV
-%token MOD
-%token OR
-%token AND
-%token COMMENT
-%token PROCESSING_INSTRUCTION
-%token TEXT
-%token NODE
-
-%right UNARY
-
-%start expr
-
-%%
-
-expr:
- or_expr
- ;
-
-location_path:
- relative_location_path
- | absolute_location_path
- ;
-
-absolute_location_path:
- SLASH
- {
- $$ = new Root();
- }
- | SLASH relative_location_path
- {
- Steps steps;
- if ($2 instanceof Steps)
- {
- steps = (Steps) $2;
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst($2);
- }
- steps.path.addFirst(new Root());
- $$ = steps;
- //$$ = new Step(new Root(), (Path) $2);
- }
- | 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 ($2 instanceof Steps)
- {
- steps = (Steps) $2;
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst($2);
- }
- steps.path.addFirst(s);
- steps.path.addFirst(new Root());
- $$ = steps;
- //Step step = new Step(s, (Path) $2);
- //$$ = new Step(new Root(), step);
- }
- ;
-
-relative_location_path:
- step
- | relative_location_path SLASH step
- {
- Steps steps;
- if ($1 instanceof Steps)
- {
- steps = (Steps) $1;
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst($1);
- }
- steps.path.addLast($3);
- $$ = steps;
- //$$ = new Step((Expr) $1, (Path) $3);
- }
- | relative_location_path DOUBLE_SLASH step
- {
- Test nt = new NodeTypeTest((short) 0);
- Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
- Collections.singletonList (nt));
- Steps steps;
- if ($1 instanceof Steps)
- {
- steps = (Steps) $1;
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst($1);
- }
- steps.path.addLast(s);
- steps.path.addLast($3);
- $$ = steps;
- //Step step = new Step(s, (Path) $3);
- //$$ = new Step((Expr) $1, step);
- }
- ;
-
-step:
- step_node_test
- {
- $$ = new Selector (Selector.CHILD, (List) $1);
- }
- | AT step_node_test
- {
- $$ = new Selector (Selector.ATTRIBUTE, (List) $2);
- }
- | axis_name DOUBLE_COLON step_node_test
- {
- $$ = new Selector (((Integer) $1).intValue (), (List) $3);
- }
- | DOT
- {
- $$ = new Selector (Selector.SELF, Collections.EMPTY_LIST);
- }
- | DOUBLE_DOT
- {
- $$ = new Selector (Selector.PARENT, Collections.EMPTY_LIST);
- }
- ;
-
-step_node_test:
- node_test
- {
- List list = new ArrayList();
- list.add($1);
- $$ = list;
- }
- | step_node_test predicate
- {
- List list = (List)$1;
- list.add($2);
- $$ = 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
- {
- $$ = new VariableReference(variableResolver, (String) $2);
- }
- ;
-
-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);
- }
- ;
-
-%%
-
-}