/* */ package org.jaxen.saxpath.base;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ class
XPathLexer
/* */ {
/* */ private
String xpath;
/* */ private int
currentPosition;
/* */ private int
endPosition;
/* */ private
Token previousToken;
/* */
/* */
XPathLexer(
String xpath) {
/* 64 */
setXPath(
xpath);
/* */ }
/* */
/* */
/* */ private void
setXPath(
String xpath) {
/* 69 */ this.
xpath =
xpath;
/* 70 */ this.
currentPosition = 0;
/* 71 */ this.
endPosition =
xpath.
length();
/* */ }
/* */
/* */
/* */
String getXPath() {
/* 76 */ return this.
xpath;
/* */ }
/* */
/* */
/* */
Token nextToken() {
/* 81 */
Token token = null;
/* */
/* */
/* */ do {
/* 85 */
token = null;
/* */
/* 87 */ switch (
LA(1)) {
/* */
/* */
/* */ case '$':
/* 91 */
token =
dollar();
/* */ break;
/* */
/* */
/* */
/* */ case '"':
/* */ case '\'':
/* 98 */
token =
literal();
/* */ break;
/* */
/* */
/* */
/* */ case '/':
/* 104 */
token =
slashes();
/* */ break;
/* */
/* */
/* */
/* */ case ',':
/* 110 */
token =
comma();
/* */ break;
/* */
/* */
/* */
/* */ case '(':
/* 116 */
token =
leftParen();
/* */ break;
/* */
/* */
/* */
/* */ case ')':
/* 122 */
token =
rightParen();
/* */ break;
/* */
/* */
/* */
/* */ case '[':
/* 128 */
token =
leftBracket();
/* */ break;
/* */
/* */
/* */
/* */ case ']':
/* 134 */
token =
rightBracket();
/* */ break;
/* */
/* */
/* */
/* */ case '+':
/* 140 */
token =
plus();
/* */ break;
/* */
/* */
/* */
/* */ case '-':
/* 146 */
token =
minus();
/* */ break;
/* */
/* */
/* */
/* */ case '<':
/* */ case '>':
/* 153 */
token =
relationalOperator();
/* */ break;
/* */
/* */
/* */
/* */ case '=':
/* 159 */
token =
equals();
/* */ break;
/* */
/* */
/* */
/* */ case '!':
/* 165 */ if (
LA(2) == '=')
/* */ {
/* 167 */
token =
notEquals();
/* */ }
/* */ break;
/* */
/* */
/* */
/* */ case '|':
/* 174 */
token =
pipe();
/* */ break;
/* */
/* */
/* */
/* */ case '@':
/* 180 */
token =
at();
/* */ break;
/* */
/* */
/* */
/* */ case ':':
/* 186 */ if (
LA(2) == ':') {
/* */
/* 188 */
token =
doubleColon();
/* */
/* */ break;
/* */ }
/* 192 */
token =
colon();
/* */ break;
/* */
/* */
/* */
/* */
/* */ case '*':
/* 199 */
token =
star();
/* */ break;
/* */
/* */
/* */
/* */ case '.':
/* 205 */ switch (
LA(2)) {
/* */
/* */
/* */ case '0':
/* */ case '1':
/* */ case '2':
/* */ case '3':
/* */ case '4':
/* */ case '5':
/* */ case '6':
/* */ case '7':
/* */ case '8':
/* */ case '9':
/* 218 */
token =
number();
/* */ break;
/* */ }
/* */
/* */
/* 223 */
token =
dots();
/* */ break;
/* */
/* */
/* */
/* */
/* */
/* */
/* */ case '0':
/* */ case '1':
/* */ case '2':
/* */ case '3':
/* */ case '4':
/* */ case '5':
/* */ case '6':
/* */ case '7':
/* */ case '8':
/* */ case '9':
/* 241 */
token =
number();
/* */ break;
/* */
/* */
/* */
/* */ case '\t':
/* */ case '\n':
/* */ case '\r':
/* */ case ' ':
/* 250 */
token =
whitespace();
/* */ break;
/* */
/* */
/* */
/* */ default:
/* 256 */ if (
isIdentifierStartChar(
LA(1)))
/* */ {
/* 258 */
token =
identifierOrOperatorName();
/* */ }
/* */ break;
/* */ }
/* */
/* 263 */ if (
token != null)
/* */ continue;
/* 265 */ if (!
hasMoreChars())
/* */ {
/* 267 */
token = new
Token(-1,
getXPath(),
currentPosition(),
endPosition());
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* 274 */
token = new
Token(-3,
getXPath(),
currentPosition(),
endPosition());
/* */
/* */
/* */ }
/* */
/* */
/* */
/* */ }
/* 282 */ while (
token.
getTokenType() == -2);
/* */
/* 284 */
setPreviousToken(
token);
/* */
/* 286 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token identifierOrOperatorName() {
/* 291 */
Token token = null;
/* */
/* 293 */ if (this.
previousToken != null)
/* */
/* */ {
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 306 */ switch (this.
previousToken.
getTokenType())
/* */
/* */ {
/* */ case 1:
/* */ case 2:
/* */ case 3:
/* */ case 4:
/* */ case 5:
/* */ case 6:
/* */ case 7:
/* */ case 8:
/* */ case 9:
/* */ case 10:
/* */ case 11:
/* */ case 12:
/* */ case 13:
/* */ case 17:
/* */ case 18:
/* */ case 19:
/* */ case 20:
/* */ case 21:
/* */ case 23:
/* */ case 25:
/* */ case 27:
/* */ case 28:
/* */ case 30:
/* 332 */
token =
identifier();
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 347 */ return
token; }
token =
operatorName(); } else {
token =
identifier(); } return
token;
/* */ }
/* */
/* */
/* */ private
Token identifier() {
/* 352 */
Token token = null;
/* */
/* 354 */ int
start =
currentPosition();
/* */
/* 356 */ while (
hasMoreChars()) {
/* */
/* 358 */ if (
isIdentifierChar(
LA(1)))
/* */ {
/* 360 */
consume();
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 368 */
token = new
Token(16,
getXPath(),
start,
currentPosition());
/* */
/* */
/* */
/* */
/* 373 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token operatorName() {
/* 378 */
Token token = null;
/* */
/* 380 */ switch (
LA(1)) {
/* */
/* */
/* */ case 'a':
/* 384 */
token =
and();
/* */ break;
/* */
/* */
/* */
/* */ case 'o':
/* 390 */
token =
or();
/* */ break;
/* */
/* */
/* */
/* */ case 'm':
/* 396 */
token =
mod();
/* */ break;
/* */
/* */
/* */
/* */ case 'd':
/* 402 */
token =
div();
/* */ break;
/* */ }
/* */
/* */
/* 407 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token mod() {
/* 412 */
Token token = null;
/* */
/* 414 */ if (
LA(1) == 'm' &&
LA(2) == 'o' &&
LA(3) == 'd') {
/* */
/* */
/* */
/* */
/* */
/* */
/* 421 */
token = new
Token(10,
getXPath(),
currentPosition(),
currentPosition() + 3);
/* */
/* */
/* */
/* */
/* 426 */
consume();
/* 427 */
consume();
/* 428 */
consume();
/* */ }
/* */
/* 431 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token div() {
/* 436 */
Token token = null;
/* */
/* 438 */ if (
LA(1) == 'd' &&
LA(2) == 'i' &&
LA(3) == 'v') {
/* */
/* */
/* */
/* */
/* */
/* */
/* 445 */
token = new
Token(11,
getXPath(),
currentPosition(),
currentPosition() + 3);
/* */
/* */
/* */
/* */
/* 450 */
consume();
/* 451 */
consume();
/* 452 */
consume();
/* */ }
/* */
/* 455 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token and() {
/* 460 */
Token token = null;
/* */
/* 462 */ if (
LA(1) == 'a' &&
LA(2) == 'n' &&
LA(3) == 'd') {
/* */
/* */
/* */
/* */
/* */
/* */
/* 469 */
token = new
Token(27,
getXPath(),
currentPosition(),
currentPosition() + 3);
/* */
/* */
/* */
/* */
/* 474 */
consume();
/* 475 */
consume();
/* 476 */
consume();
/* */ }
/* */
/* 479 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token or() {
/* 484 */
Token token = null;
/* */
/* 486 */ if (
LA(1) == 'o' &&
LA(2) == 'r') {
/* */
/* */
/* */
/* */
/* 491 */
token = new
Token(28,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* */
/* 496 */
consume();
/* 497 */
consume();
/* */ }
/* */
/* 500 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token number() {
/* 505 */ int
start =
currentPosition();
/* 506 */ boolean
periodAllowed = true;
/* */
/* */
/* */
/* */ while (true) {
/* 511 */ switch (
LA(1)) {
/* */
/* */ case '.':
/* 514 */ if (
periodAllowed) {
/* */
/* 516 */
periodAllowed = false;
/* 517 */
consume();
/* */ continue;
/* */ }
/* */ break;
/* */
/* */
/* */
/* */ case '0':
/* */ case '1':
/* */ case '2':
/* */ case '3':
/* */ case '4':
/* */ case '5':
/* */ case '6':
/* */ case '7':
/* */ case '8':
/* */ case '9':
/* 534 */
consume();
/* */ continue;
/* */ }
/* */
/* */
/* */ break;
/* */ }
/* 541 */ return new
Token(29,
getXPath(),
start,
currentPosition());
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ private
Token whitespace() {
/* 549 */
consume();
/* */
/* */
/* 552 */ while (
hasMoreChars()) {
/* */
/* 554 */ switch (
LA(1)) {
/* */
/* */
/* */ case '\t':
/* */ case '\n':
/* */ case '\r':
/* */ case ' ':
/* 561 */
consume();
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ }
/* 572 */ return new
Token(-2,
getXPath(), 0, 0);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ private
Token comma() {
/* 580 */
Token token = new
Token(30,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 585 */
consume();
/* */
/* 587 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token equals() {
/* 592 */
Token token = new
Token(1,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 597 */
consume();
/* */
/* 599 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token minus() {
/* 604 */
Token token = new
Token(8,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* 608 */
consume();
/* */
/* 610 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token plus() {
/* 615 */
Token token = new
Token(7,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* 619 */
consume();
/* */
/* 621 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token dollar() {
/* 626 */
Token token = new
Token(25,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* 630 */
consume();
/* */
/* 632 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token pipe() {
/* 637 */
Token token = new
Token(18,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 642 */
consume();
/* */
/* 644 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token at() {
/* 649 */
Token token = new
Token(17,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 654 */
consume();
/* */
/* 656 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token colon() {
/* 661 */
Token token = new
Token(19,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* 665 */
consume();
/* */
/* 667 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token doubleColon() {
/* 672 */
Token token = new
Token(20,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* */
/* 677 */
consume();
/* 678 */
consume();
/* */
/* 680 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token notEquals() {
/* 685 */
Token token = new
Token(2,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* */
/* 690 */
consume();
/* 691 */
consume();
/* */
/* 693 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token relationalOperator() {
/* 698 */
Token token = null;
/* */
/* 700 */ switch (
LA(1)) {
/* */
/* */
/* */ case '<':
/* 704 */ if (
LA(2) == '=') {
/* */
/* 706 */
token = new
Token(4,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* 710 */
consume();
/* */ }
/* */ else {
/* */
/* 714 */
token = new
Token(3,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */ }
/* */
/* */
/* */
/* */
/* 720 */
consume();
/* */ break;
/* */
/* */
/* */ case '>':
/* 725 */ if (
LA(2) == '=') {
/* */
/* 727 */
token = new
Token(6,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* 731 */
consume();
/* */ }
/* */ else {
/* */
/* 735 */
token = new
Token(5,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */ }
/* */
/* */
/* */
/* */
/* 741 */
consume();
/* */ break;
/* */ }
/* */
/* */
/* 746 */ return
token;
/* */ }
/* */
/* */
/* */
/* */ private
Token star() {
/* 752 */
Token token = new
Token(9,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 757 */
consume();
/* */
/* 759 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token literal() {
/* 764 */
Token token = null;
/* */
/* 766 */ char
match =
LA(1);
/* */
/* 768 */
consume();
/* */
/* 770 */ int
start =
currentPosition();
/* */
/* */
/* 773 */ while (
token == null &&
hasMoreChars()) {
/* */
/* */
/* 776 */ if (
LA(1) ==
match)
/* */ {
/* 778 */
token = new
Token(26,
getXPath(),
start,
currentPosition());
/* */ }
/* */
/* */
/* */
/* 783 */
consume();
/* */ }
/* */
/* 786 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token dots() {
/* 791 */
Token token = null;
/* */
/* 793 */ switch (
LA(2))
/* */
/* */ {
/* */ case '.':
/* 797 */
token = new
Token(15,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* 801 */
consume();
/* 802 */
consume();
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 816 */ return
token; }
token = new
Token(14,
getXPath(),
currentPosition(),
currentPosition() + 1);
consume(); return
token;
/* */ }
/* */
/* */
/* */ private
Token leftBracket() {
/* 821 */
Token token = new
Token(21,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 826 */
consume();
/* */
/* 828 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token rightBracket() {
/* 833 */
Token token = new
Token(22,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 838 */
consume();
/* */
/* 840 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token leftParen() {
/* 845 */
Token token = new
Token(23,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 850 */
consume();
/* */
/* 852 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token rightParen() {
/* 857 */
Token token = new
Token(24,
getXPath(),
currentPosition(),
currentPosition() + 1);
/* */
/* */
/* */
/* */
/* 862 */
consume();
/* */
/* 864 */ return
token;
/* */ }
/* */
/* */
/* */ private
Token slashes() {
/* 869 */
Token token = null;
/* */
/* 871 */ switch (
LA(2))
/* */
/* */ {
/* */ case '/':
/* 875 */
token = new
Token(13,
getXPath(),
currentPosition(),
currentPosition() + 2);
/* */
/* */
/* */
/* 879 */
consume();
/* 880 */
consume();
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 893 */ return
token; }
token = new
Token(12,
getXPath(),
currentPosition(),
currentPosition() + 1);
consume(); return
token;
/* */ }
/* */
/* */
/* */ private char
LA(int
i) {
/* 898 */ if (this.
currentPosition +
i - 1 >=
endPosition())
/* */ {
/* 900 */ return
Character.
MAX_VALUE;
/* */ }
/* */
/* 903 */ return
getXPath().
charAt(
currentPosition() +
i - 1);
/* */ }
/* */
/* */
/* */ private void
consume() {
/* 908 */ this.
currentPosition++;
/* */ }
/* */
/* */
/* */ private int
currentPosition() {
/* 913 */ return this.
currentPosition;
/* */ }
/* */
/* */
/* */ private int
endPosition() {
/* 918 */ return this.
endPosition;
/* */ }
/* */
/* */
/* */ private void
setPreviousToken(
Token previousToken) {
/* 923 */ this.
previousToken =
previousToken;
/* */ }
/* */
/* */
/* */ private boolean
hasMoreChars() {
/* 928 */ return (
currentPosition() <
endPosition());
/* */ }
/* */
/* */
/* */ private boolean
isIdentifierChar(char
c) {
/* 933 */ return
Verifier.
isXMLNCNameCharacter(
c);
/* */ }
/* */
/* */
/* */ private boolean
isIdentifierStartChar(char
c) {
/* 938 */ return
Verifier.
isXMLNCNameStartCharacter(
c);
/* */ }
/* */ }
/* Location: /Users/tommy/.m2/repository/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar!/org/jaxen/saxpath/base/XPathLexer.class
* Java compiler version: 2 (46.0)
* JD-Core Version: 1.1.3
*/