/* Generated By:CSharpCC: Do not edit this line. SelectorParser.cs */ | |
/** | |
* | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
using System; | |
using System.IO; | |
using System.Text; | |
using System.Collections; | |
using Apache.NMS; | |
namespace Apache.NMS.Selector | |
{ | |
/// <summary> | |
/// JMS Selector Parser generated by <a href="https://github.com/deveel/csharpcc">CSharpCC</a> | |
/// | |
/// Do not edit this .cs file directly - it is autogenerated from SelectorParser.csc | |
/// using <c>csharpcc.exe -UNICODE_INPUT=true SelectorParser.csc</c>. | |
/// | |
/// SelectorParser.csc is adapted from | |
/// <a href="https://raw.githubusercontent.com/apache/activemq/activemq-4.0/activemq-core/src/main/grammar/SelectorParser.jj"> | |
/// ActiveMQ 4.0 SelectorParser.jj</a> | |
/// </summary> | |
public class SelectorParser : SelectorParserConstants { | |
public SelectorParser() | |
: this(new StringReader("")) | |
{ | |
} | |
public IBooleanExpression Parse(string selector) | |
{ | |
this.ReInit(new StringReader(selector)); | |
try | |
{ | |
return this.JmsSelector(); | |
} | |
catch(Exception e) | |
{ | |
throw new InvalidSelectorException(selector, e); | |
} | |
} | |
private IBooleanExpression AsBooleanExpression(IExpression value) | |
{ | |
if(value is IBooleanExpression) | |
{ | |
return (IBooleanExpression)value; | |
} | |
if(value is PropertyExpression) | |
{ | |
return UnaryExpression.CreateBooleanCast(value); | |
} | |
throw new ParseException("IExpression will not result in a boolean value: " + value); | |
} | |
// ---------------------------------------------------------------------------- | |
// Grammar | |
// ---------------------------------------------------------------------------- | |
public IBooleanExpression JmsSelector() { | |
IExpression left = null; | |
left = GetOrExpression(); | |
{return AsBooleanExpression(left);} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetOrExpression() { | |
IExpression left; | |
IExpression right; | |
left = GetAndExpression(); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case OR: | |
; | |
break; | |
default: | |
goto label_1; | |
} | |
mcc_consume_token(OR); | |
right = GetAndExpression(); | |
left = LogicExpression.CreateOR(AsBooleanExpression(left), AsBooleanExpression(right)); | |
}label_1: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetAndExpression() { | |
IExpression left; | |
IExpression right; | |
left = GetEqualityExpression(); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case AND: | |
; | |
break; | |
default: | |
goto label_2; | |
} | |
mcc_consume_token(AND); | |
right = GetEqualityExpression(); | |
left = LogicExpression.CreateAND(AsBooleanExpression(left), AsBooleanExpression(right)); | |
}label_2: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetEqualityExpression() { | |
IExpression left; | |
IExpression right; | |
left = GetComparisonExpression(); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case IS: | |
case 28: | |
case 29: | |
; | |
break; | |
default: | |
goto label_3; | |
} | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 28: | |
mcc_consume_token(28); | |
right = GetComparisonExpression(); | |
left = ComparisonExpression.CreateEqual(left, right); | |
break; | |
case 29: | |
mcc_consume_token(29); | |
right = GetComparisonExpression(); | |
left = ComparisonExpression.CreateNotEqual(left, right); | |
break; | |
default: | |
if (mcc_2_1(2)) { | |
mcc_consume_token(IS); | |
mcc_consume_token(NULL); | |
left = ComparisonExpression.CreateIsNull(left); | |
} else { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case IS: | |
mcc_consume_token(IS); | |
mcc_consume_token(NOT); | |
mcc_consume_token(NULL); | |
left = ComparisonExpression.CreateIsNotNull(left); | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
} | |
break; | |
} | |
}label_3: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetComparisonExpression() { | |
IExpression left; | |
IExpression right; | |
IExpression low; | |
IExpression high; | |
string t; | |
string u; | |
ArrayList list; | |
left = GetAddExpression(); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case NOT: | |
case BETWEEN: | |
case LIKE: | |
case IN: | |
case 30: | |
case 31: | |
case 32: | |
case 33: | |
; | |
break; | |
default: | |
goto label_4; | |
} | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 30: | |
mcc_consume_token(30); | |
right = GetAddExpression(); | |
left = ComparisonExpression.CreateGreaterThan(left, right); | |
break; | |
case 31: | |
mcc_consume_token(31); | |
right = GetAddExpression(); | |
left = ComparisonExpression.CreateGreaterThanOrEqual(left, right); | |
break; | |
case 32: | |
mcc_consume_token(32); | |
right = GetAddExpression(); | |
left = ComparisonExpression.CreateLesserThan(left, right); | |
break; | |
case 33: | |
mcc_consume_token(33); | |
right = GetAddExpression(); | |
left = ComparisonExpression.CreateLesserThanOrEqual(left, right); | |
break; | |
case LIKE: | |
u = null; | |
mcc_consume_token(LIKE); | |
t = GetStringLitteral(); | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case ESCAPE: | |
mcc_consume_token(ESCAPE); | |
u = GetStringLitteral(); | |
break; | |
default: | |
; | |
break; | |
} | |
left = ComparisonExpression.CreateLike(left, t, u); | |
break; | |
default: | |
if (mcc_2_2(2)) { | |
u=null; | |
mcc_consume_token(NOT); | |
mcc_consume_token(LIKE); | |
t = GetStringLitteral(); | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case ESCAPE: | |
mcc_consume_token(ESCAPE); | |
u = GetStringLitteral(); | |
break; | |
default: | |
; | |
break; | |
} | |
left = ComparisonExpression.CreateNotLike(left, t, u); | |
} else { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case BETWEEN: | |
mcc_consume_token(BETWEEN); | |
low = GetAddExpression(); | |
mcc_consume_token(AND); | |
high = GetAddExpression(); | |
left = ComparisonExpression.CreateBetween(left, low, high); | |
break; | |
default: | |
if (mcc_2_3(2)) { | |
mcc_consume_token(NOT); | |
mcc_consume_token(BETWEEN); | |
low = GetAddExpression(); | |
mcc_consume_token(AND); | |
high = GetAddExpression(); | |
left = ComparisonExpression.CreateNotBetween(left, low, high); | |
} else { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case IN: | |
mcc_consume_token(IN); | |
mcc_consume_token(34); | |
t = GetStringLitteral(); | |
list = new ArrayList(); | |
list.Add(t); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 35: | |
; | |
break; | |
default: | |
goto label_5; | |
} | |
mcc_consume_token(35); | |
t = GetStringLitteral(); | |
list.Add(t); | |
}label_5: ; | |
mcc_consume_token(36); | |
left = ComparisonExpression.CreateIn(left, list); | |
break; | |
default: | |
if (mcc_2_4(2)) { | |
mcc_consume_token(NOT); | |
mcc_consume_token(IN); | |
mcc_consume_token(34); | |
t = GetStringLitteral(); | |
list = new ArrayList(); | |
list.Add(t); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 35: | |
; | |
break; | |
default: | |
goto label_6; | |
} | |
mcc_consume_token(35); | |
t = GetStringLitteral(); | |
list.Add(t); | |
}label_6: ; | |
mcc_consume_token(36); | |
left = ComparisonExpression.CreateNotIn(left, list); | |
} else { | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
break; | |
} | |
} | |
break; | |
} | |
} | |
break; | |
} | |
}label_4: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetAddExpression() { | |
IExpression left; | |
IExpression right; | |
left = GetMultiplyExpression(); | |
while (true) { | |
if (mcc_2_5(2147483647)) { | |
; | |
} else { | |
goto label_7; | |
} | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 37: | |
mcc_consume_token(37); | |
right = GetMultiplyExpression(); | |
left = ArithmeticExpression.CreatePlus(left, right); | |
break; | |
case 38: | |
mcc_consume_token(38); | |
right = GetMultiplyExpression(); | |
left = ArithmeticExpression.CreateMinus(left, right); | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
}label_7: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetMultiplyExpression() { | |
IExpression left; | |
IExpression right; | |
left = GetUnaryExpression(); | |
while (true) { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 39: | |
case 40: | |
case 41: | |
; | |
break; | |
default: | |
goto label_8; | |
} | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 39: | |
mcc_consume_token(39); | |
right = GetUnaryExpression(); | |
left = ArithmeticExpression.CreateMultiply(left, right); | |
break; | |
case 40: | |
mcc_consume_token(40); | |
right = GetUnaryExpression(); | |
left = ArithmeticExpression.CreateDivide(left, right); | |
break; | |
case 41: | |
mcc_consume_token(41); | |
right = GetUnaryExpression(); | |
left = ArithmeticExpression.CreateMod(left, right); | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
}label_8: ; | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetUnaryExpression() { | |
IExpression left = null; | |
if (mcc_2_6(2147483647)) { | |
mcc_consume_token(37); | |
left = GetUnaryExpression(); | |
} else { | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case 38: | |
mcc_consume_token(38); | |
left = GetUnaryExpression(); | |
left = UnaryExpression.CreateNegate(left); | |
break; | |
case NOT: | |
mcc_consume_token(NOT); | |
left = GetUnaryExpression(); | |
left = UnaryExpression.CreateNOT(AsBooleanExpression(left)); | |
break; | |
case TRUE: | |
case FALSE: | |
case NULL: | |
case DECIMAL_LITERAL: | |
case HEX_LITERAL: | |
case OCTAL_LITERAL: | |
case FLOATING_POINT_LITERAL: | |
case STRING_LITERAL: | |
case ID: | |
case 34: | |
left = GetPrimaryExpression(); | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
} | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public IExpression GetPrimaryExpression() { | |
IExpression left = null; | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case TRUE: | |
case FALSE: | |
case NULL: | |
case DECIMAL_LITERAL: | |
case HEX_LITERAL: | |
case OCTAL_LITERAL: | |
case FLOATING_POINT_LITERAL: | |
case STRING_LITERAL: | |
left = GetLiteral(); | |
break; | |
case ID: | |
left = GetVariable(); | |
break; | |
case 34: | |
mcc_consume_token(34); | |
left = GetOrExpression(); | |
mcc_consume_token(36); | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public ConstantExpression GetLiteral() { | |
Token t; | |
string s; | |
ConstantExpression left = null; | |
switch ((mcc_ntk==-1)?mcc_mntk():mcc_ntk) { | |
case STRING_LITERAL: | |
s = GetStringLitteral(); | |
left = new ConstantExpression(s); | |
break; | |
case DECIMAL_LITERAL: | |
t = mcc_consume_token(DECIMAL_LITERAL); | |
left = ConstantExpression.CreateFromDecimal(t.image); | |
break; | |
case HEX_LITERAL: | |
t = mcc_consume_token(HEX_LITERAL); | |
left = ConstantExpression.CreateFromHex(t.image); | |
break; | |
case OCTAL_LITERAL: | |
t = mcc_consume_token(OCTAL_LITERAL); | |
left = ConstantExpression.CreateFromOctal(t.image); | |
break; | |
case FLOATING_POINT_LITERAL: | |
t = mcc_consume_token(FLOATING_POINT_LITERAL); | |
left = ConstantExpression.CreateFloat(t.image); | |
break; | |
case TRUE: | |
mcc_consume_token(TRUE); | |
left = ConstantExpression.TRUE; | |
break; | |
case FALSE: | |
mcc_consume_token(FALSE); | |
left = ConstantExpression.FALSE; | |
break; | |
case NULL: | |
mcc_consume_token(NULL); | |
left = ConstantExpression.NULL; | |
break; | |
default: | |
mcc_consume_token(-1); | |
throw new ParseException(); | |
} | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
public string GetStringLitteral() { | |
Token t; | |
StringBuilder rc = new StringBuilder(); | |
t = mcc_consume_token(STRING_LITERAL); | |
// Decode the sting value. | |
String image = t.image; | |
for(int c = 1; c < image.Length - 1; c++) | |
{ | |
char ch = image[c]; | |
if(ch == '\'') | |
{ | |
c++; | |
} | |
rc.Append(ch); | |
} | |
{return rc.ToString();} | |
throw new Exception("Missing return statement in function"); | |
} | |
public PropertyExpression GetVariable() { | |
Token t; | |
PropertyExpression left = null; | |
t = mcc_consume_token(ID); | |
left = new PropertyExpression(t.image); | |
{return left;} | |
throw new Exception("Missing return statement in function"); | |
} | |
private bool mcc_2_1(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_1(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_2_2(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_2(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_2_3(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_3(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_2_4(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_4(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_2_5(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_5(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_2_6(int xla) { | |
mcc_la = xla; mcc_lastpos = mcc_scanpos = token; | |
try { return !mcc_3_6(); } | |
catch(LookaheadSuccess) { return true; } | |
} | |
private bool mcc_3R_57() { | |
if (mcc_scan_token(ESCAPE)) return true; | |
if (mcc_3R_36()) return true; | |
return false; | |
} | |
private bool mcc_3R_19() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_20()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_21()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_22()) return true; | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_39() { | |
if (mcc_3R_41()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_42()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3_4() { | |
if (mcc_scan_token(NOT)) return true; | |
if (mcc_scan_token(IN)) return true; | |
if (mcc_scan_token(34)) return true; | |
if (mcc_3R_36()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_59()) { mcc_scanpos = xsp; break; } | |
} | |
if (mcc_scan_token(36)) return true; | |
return false; | |
} | |
private bool mcc_3_6() { | |
if (mcc_scan_token(37)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_15() { | |
if (mcc_3R_19()) return true; | |
return false; | |
} | |
private bool mcc_3R_36() { | |
if (mcc_scan_token(STRING_LITERAL)) return true; | |
return false; | |
} | |
private bool mcc_3R_14() { | |
if (mcc_scan_token(NOT)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_12() { | |
if (mcc_scan_token(37)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_53() { | |
if (mcc_scan_token(IN)) return true; | |
if (mcc_scan_token(34)) return true; | |
if (mcc_3R_36()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_58()) { mcc_scanpos = xsp; break; } | |
} | |
if (mcc_scan_token(36)) return true; | |
return false; | |
} | |
private bool mcc_3R_45() { | |
if (mcc_scan_token(IS)) return true; | |
if (mcc_scan_token(NOT)) return true; | |
if (mcc_scan_token(NULL)) return true; | |
return false; | |
} | |
private bool mcc_3R_13() { | |
if (mcc_scan_token(38)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_33() { | |
if (mcc_scan_token(NULL)) return true; | |
return false; | |
} | |
private bool mcc_3_1() { | |
if (mcc_scan_token(IS)) return true; | |
if (mcc_scan_token(NULL)) return true; | |
return false; | |
} | |
private bool mcc_3R_10() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_12()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_13()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_14()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_15()) return true; | |
} | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_44() { | |
if (mcc_scan_token(29)) return true; | |
if (mcc_3R_39()) return true; | |
return false; | |
} | |
private bool mcc_3R_32() { | |
if (mcc_scan_token(FALSE)) return true; | |
return false; | |
} | |
private bool mcc_3_3() { | |
if (mcc_scan_token(NOT)) return true; | |
if (mcc_scan_token(BETWEEN)) return true; | |
if (mcc_3R_41()) return true; | |
if (mcc_scan_token(AND)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_43() { | |
if (mcc_scan_token(28)) return true; | |
if (mcc_3R_39()) return true; | |
return false; | |
} | |
private bool mcc_3R_40() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_43()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_44()) { | |
mcc_scanpos = xsp; | |
if (mcc_3_1()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_45()) return true; | |
} | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_52() { | |
if (mcc_scan_token(BETWEEN)) return true; | |
if (mcc_3R_41()) return true; | |
if (mcc_scan_token(AND)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_31() { | |
if (mcc_scan_token(TRUE)) return true; | |
return false; | |
} | |
private bool mcc_3R_56() { | |
if (mcc_scan_token(ESCAPE)) return true; | |
if (mcc_3R_36()) return true; | |
return false; | |
} | |
private bool mcc_3R_18() { | |
if (mcc_scan_token(41)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_30() { | |
if (mcc_scan_token(FLOATING_POINT_LITERAL)) return true; | |
return false; | |
} | |
private bool mcc_3R_37() { | |
if (mcc_3R_39()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_40()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3_2() { | |
if (mcc_scan_token(NOT)) return true; | |
if (mcc_scan_token(LIKE)) return true; | |
if (mcc_3R_36()) return true; | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_57()) mcc_scanpos = xsp; | |
return false; | |
} | |
private bool mcc_3R_51() { | |
if (mcc_scan_token(LIKE)) return true; | |
if (mcc_3R_36()) return true; | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_56()) mcc_scanpos = xsp; | |
return false; | |
} | |
private bool mcc_3R_17() { | |
if (mcc_scan_token(40)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_29() { | |
if (mcc_scan_token(OCTAL_LITERAL)) return true; | |
return false; | |
} | |
private bool mcc_3R_16() { | |
if (mcc_scan_token(39)) return true; | |
if (mcc_3R_10()) return true; | |
return false; | |
} | |
private bool mcc_3R_11() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_16()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_17()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_18()) return true; | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_38() { | |
if (mcc_scan_token(AND)) return true; | |
if (mcc_3R_37()) return true; | |
return false; | |
} | |
private bool mcc_3R_28() { | |
if (mcc_scan_token(HEX_LITERAL)) return true; | |
return false; | |
} | |
private bool mcc_3R_9() { | |
if (mcc_3R_10()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_11()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3R_27() { | |
if (mcc_scan_token(DECIMAL_LITERAL)) return true; | |
return false; | |
} | |
private bool mcc_3R_55() { | |
if (mcc_scan_token(38)) return true; | |
if (mcc_3R_9()) return true; | |
return false; | |
} | |
private bool mcc_3R_34() { | |
if (mcc_3R_37()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_38()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3_5() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_scan_token(37)) { | |
mcc_scanpos = xsp; | |
if (mcc_scan_token(38)) return true; | |
} | |
if (mcc_3R_9()) return true; | |
return false; | |
} | |
private bool mcc_3R_50() { | |
if (mcc_scan_token(33)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_54() { | |
if (mcc_scan_token(37)) return true; | |
if (mcc_3R_9()) return true; | |
return false; | |
} | |
private bool mcc_3R_26() { | |
if (mcc_3R_36()) return true; | |
return false; | |
} | |
private bool mcc_3R_49() { | |
if (mcc_scan_token(32)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_59() { | |
if (mcc_scan_token(35)) return true; | |
if (mcc_3R_36()) return true; | |
return false; | |
} | |
private bool mcc_3R_46() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_54()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_55()) return true; | |
} | |
return false; | |
} | |
private bool mcc_3R_35() { | |
if (mcc_scan_token(OR)) return true; | |
if (mcc_3R_34()) return true; | |
return false; | |
} | |
private bool mcc_3R_23() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_26()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_27()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_28()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_29()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_30()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_31()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_32()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_33()) return true; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_48() { | |
if (mcc_scan_token(31)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_24() { | |
if (mcc_scan_token(ID)) return true; | |
return false; | |
} | |
private bool mcc_3R_47() { | |
if (mcc_scan_token(30)) return true; | |
if (mcc_3R_41()) return true; | |
return false; | |
} | |
private bool mcc_3R_42() { | |
Token xsp; | |
xsp = mcc_scanpos; | |
if (mcc_3R_47()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_48()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_49()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_50()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_51()) { | |
mcc_scanpos = xsp; | |
if (mcc_3_2()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_52()) { | |
mcc_scanpos = xsp; | |
if (mcc_3_3()) { | |
mcc_scanpos = xsp; | |
if (mcc_3R_53()) { | |
mcc_scanpos = xsp; | |
if (mcc_3_4()) return true; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return false; | |
} | |
private bool mcc_3R_41() { | |
if (mcc_3R_9()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_46()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3R_25() { | |
if (mcc_3R_34()) return true; | |
Token xsp; | |
while (true) { | |
xsp = mcc_scanpos; | |
if (mcc_3R_35()) { mcc_scanpos = xsp; break; } | |
} | |
return false; | |
} | |
private bool mcc_3R_22() { | |
if (mcc_scan_token(34)) return true; | |
if (mcc_3R_25()) return true; | |
if (mcc_scan_token(36)) return true; | |
return false; | |
} | |
private bool mcc_3R_21() { | |
if (mcc_3R_24()) return true; | |
return false; | |
} | |
private bool mcc_3R_20() { | |
if (mcc_3R_23()) return true; | |
return false; | |
} | |
private bool mcc_3R_58() { | |
if (mcc_scan_token(35)) return true; | |
if (mcc_3R_36()) return true; | |
return false; | |
} | |
public SelectorParserTokenManager token_source; | |
SimpleCharStream mcc_input_stream; | |
public Token token, mcc_nt; | |
private int mcc_ntk; | |
private Token mcc_scanpos, mcc_lastpos; | |
private int mcc_la; | |
public bool lookingAhead = false; | |
//private bool mcc_semLA; | |
public SelectorParser(System.IO.Stream stream) { | |
mcc_input_stream = new SimpleCharStream(stream, 1, 1); | |
token_source = new SelectorParserTokenManager(mcc_input_stream); | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
public void ReInit(System.IO.Stream stream) { | |
mcc_input_stream.ReInit(stream, 1, 1); | |
token_source.ReInit(mcc_input_stream); | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
public SelectorParser(System.IO.TextReader stream) { | |
mcc_input_stream = new SimpleCharStream(stream, 1, 1); | |
token_source = new SelectorParserTokenManager(mcc_input_stream); | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
public void ReInit(System.IO.TextReader stream) { | |
mcc_input_stream.ReInit(stream, 1, 1); | |
token_source.ReInit(mcc_input_stream); | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
public SelectorParser(SelectorParserTokenManager tm) { | |
token_source = tm; | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
public void ReInit(SelectorParserTokenManager tm) { | |
token_source = tm; | |
token = new Token(); | |
mcc_ntk = -1; | |
} | |
private Token mcc_consume_token(int kind) { | |
Token oldToken = null; | |
if ((oldToken = token).next != null) token = token.next; | |
else token = token.next = token_source.GetNextToken(); | |
mcc_ntk = -1; | |
if (token.kind == kind) { | |
return token; | |
} | |
token = oldToken; | |
throw GenerateParseException(); | |
} | |
private class LookaheadSuccess : System.Exception { } | |
private LookaheadSuccess mcc_ls = new LookaheadSuccess(); | |
private bool mcc_scan_token(int kind) { | |
if (mcc_scanpos == mcc_lastpos) { | |
mcc_la--; | |
if (mcc_scanpos.next == null) { | |
mcc_lastpos = mcc_scanpos = mcc_scanpos.next = token_source.GetNextToken(); | |
} else { | |
mcc_lastpos = mcc_scanpos = mcc_scanpos.next; | |
} | |
} else { | |
mcc_scanpos = mcc_scanpos.next; | |
} | |
if (mcc_scanpos.kind != kind) return true; | |
if (mcc_la == 0 && mcc_scanpos == mcc_lastpos) throw mcc_ls; | |
return false; | |
} | |
public Token GetNextToken() { | |
if (token.next != null) token = token.next; | |
else token = token.next = token_source.GetNextToken(); | |
mcc_ntk = -1; | |
return token; | |
} | |
public Token GetToken(int index) { | |
Token t = lookingAhead ? mcc_scanpos : token; | |
for (int i = 0; i < index; i++) { | |
if (t.next != null) t = t.next; | |
else t = t.next = token_source.GetNextToken(); | |
} | |
return t; | |
} | |
private int mcc_mntk() { | |
if ((mcc_nt=token.next) == null) | |
return (mcc_ntk = (token.next=token_source.GetNextToken()).kind); | |
else | |
return (mcc_ntk = mcc_nt.kind); | |
} | |
public ParseException GenerateParseException() { | |
Token errortok = token.next; | |
int line = errortok.beginLine, column = errortok.beginColumn; | |
string mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image; | |
return new ParseException("Parse error at line " + line + ", column " + column + ". Encountered: " + mess); | |
} | |
public void enable_tracing() { | |
} | |
public void disable_tracing() { | |
} | |
} | |
} |