| /* created on 9/8/2012 9:28:14 AM from peg generator V1.0 using 'ExcelFormula.txt' as input*/ |
| |
| using Peg.Base; |
| using System; |
| using System.IO; |
| using System.Text; |
| namespace ExcelFormula |
| { |
| |
| enum EExcelFormula{Formula= 1, Expression= 2, InfixTerms= 3, PreAndPostTerm= 4, |
| Term= 5, RefInfixTerms= 6, RefTerm= 7, Constant= 8, RefConstant= 9, |
| ErrorConstant= 10, LogicalConstant= 11, NumericalConstant= 12, |
| SignificandPart= 13, WholeNumberPart= 14, FractionalPart= 15, |
| ExponentPart= 16, StringConstant= 17, StringCharacter= 18, HighCharacter= 19, |
| ArrayConstant= 20, ConstantListRows= 21, ConstantListRow= 22, |
| InfixOperator= 23, ValueInfixOperator= 24, RefInfixOperator= 25, |
| UnionOperator= 26, IntersectionOperator= 27, RangeOperator= 28, |
| PostfixOperator= 29, PrefixOperator= 30, CellReference= 31, LocalCellReference= 32, |
| ExternalCellReference= 33, BookPrefix= 34, BangReference= 35, |
| SheetRangeReference= 36, SingleSheetPrefix= 37, SingleSheetReference= 38, |
| SingleSheetArea= 39, SingleSheet= 40, SheetRange= 41, WorkbookIndex= 42, |
| SheetName= 43, SheetNameCharacter= 44, SheetNameSpecial= 45, |
| SheetNameBaseCharacter= 46, A1Reference= 47, A1Cell= 48, A1Area= 49, |
| A1Column= 50, A1AbsoluteColumn= 51, A1RelativeColumn= 52, A1Row= 53, |
| A1AbsoluteRow= 54, A1RelativeRow= 55, CellFunctionCall= 56, UserDefinedFunctionCall= 57, |
| UserDefinedFunctionName= 58, ArgumentList= 59, Argument= 60, |
| ArgumentExpression= 61, ArgumentInfixTerms= 62, ArgumentPreAndPostTerm= 63, |
| ArgumentTerm= 64, ArgumentRefInfixTerms= 65, ArgumentRefTerm= 66, |
| ArgumentInfixOperator= 67, RefArgumentInfixOperator= 68, NameReference= 69, |
| ExternalName= 70, BangName= 71, Name= 72, NameStartCharacter= 73, |
| NameCharacter= 74, StructureReference= 75, TableIdentifier= 76, |
| TableName= 77, IntraTableReference= 78, InnerReference= 79, Keyword= 80, |
| KeywordList= 81, ColumnRange= 82, Column= 83, SimpleColumnName= 84, |
| EscapeColumnCharacter= 85, UnescapedColumnCharacter= 86, AnyNoSpaceColumnCharacter= 87, |
| SpacedComma= 88, SpacedLBracket= 89, SpacedRBracket= 90, ws= 91}; |
| class ExcelFormula : PegCharParser |
| { |
| |
| #region Input Properties |
| public static EncodingClass encodingClass = EncodingClass.ascii; |
| public static UnicodeDetection unicodeDetection = UnicodeDetection.notApplicable; |
| #endregion Input Properties |
| #region Constructors |
| public ExcelFormula() |
| : base() |
| { |
| |
| } |
| public ExcelFormula(string src,TextWriter FerrOut) |
| : base(src,FerrOut) |
| { |
| |
| } |
| #endregion Constructors |
| #region Overrides |
| public override string GetRuleNameFromId(int id) |
| { |
| try |
| { |
| EExcelFormula ruleEnum = (EExcelFormula)id; |
| string s= ruleEnum.ToString(); |
| int val; |
| if( int.TryParse(s,out val) ){ |
| return base.GetRuleNameFromId(id); |
| }else{ |
| return s; |
| } |
| } |
| catch (Exception) |
| { |
| return base.GetRuleNameFromId(id); |
| } |
| } |
| public override void GetProperties(out EncodingClass encoding, out UnicodeDetection detection) |
| { |
| encoding = encodingClass; |
| detection = unicodeDetection; |
| } |
| #endregion Overrides |
| #region Grammar Rules |
| public bool Formula() /*Formula: Expression (!./FATAL<"end of line expected">);*/ |
| { |
| |
| return And(()=> |
| Expression() |
| && ( Not(()=> Any() ) || Fatal("end of line expected")) ); |
| } |
| public bool Expression() /*Expression: ws InfixTerms;*/ |
| { |
| |
| return And(()=> ws() && InfixTerms() ); |
| } |
| public bool InfixTerms() /*InfixTerms: PreAndPostTerm (InfixOperator ws PreAndPostTerm)*;*/ |
| { |
| |
| return And(()=> |
| PreAndPostTerm() |
| && OptRepeat(()=> |
| And(()=> |
| InfixOperator() |
| && ws() |
| && PreAndPostTerm() ) ) ); |
| } |
| public bool PreAndPostTerm() /*PreAndPostTerm: (PrefixOperator ws)* Term (PostfixOperator ws)*;*/ |
| { |
| |
| return And(()=> |
| OptRepeat(()=> And(()=> PrefixOperator() && ws() ) ) |
| && Term() |
| && OptRepeat(()=> And(()=> PostfixOperator() && ws() ) ) ); |
| } |
| public bool Term() /*Term: (RefInfixTerms / '(' Expression ')' / Constant) ws;*/ |
| { |
| |
| return And(()=> |
| ( |
| RefInfixTerms() |
| || And(()=> Char('(') && Expression() && Char(')') ) |
| || Constant()) |
| && ws() ); |
| } |
| public bool RefInfixTerms() /*RefInfixTerms: RefTerm (RefInfixOperator ws RefTerm)*;*/ |
| { |
| |
| return And(()=> |
| RefTerm() |
| && OptRepeat(()=> |
| And(()=> RefInfixOperator() && ws() && RefTerm() ) ) ); |
| } |
| public bool RefTerm() /*RefTerm: '(' ws RefInfixTerms ')' / RefConstant / CellFunctionCall / CellReference / UserDefinedFunctionCall |
| / NameReference / StructureReference;*/ |
| { |
| |
| return |
| And(()=> |
| Char('(') |
| && ws() |
| && RefInfixTerms() |
| && Char(')') ) |
| || RefConstant() |
| || CellFunctionCall() |
| || CellReference() |
| || UserDefinedFunctionCall() |
| || NameReference() |
| || StructureReference(); |
| } |
| public bool Constant() /*^^Constant: ErrorConstant / LogicalConstant / NumericalConstant / StringConstant / ArrayConstant;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.Constant,()=> |
| |
| ErrorConstant() |
| || LogicalConstant() |
| || NumericalConstant() |
| || StringConstant() |
| || ArrayConstant() ); |
| } |
| public bool RefConstant() /*RefConstant: '#REF!';*/ |
| { |
| |
| return Char('#','R','E','F','!'); |
| } |
| public bool ErrorConstant() /*ErrorConstant: RefConstant / '#DIV/0!' / '#N/A' / '#NAME?' / '#NULL!' / '#NUM!' / '#VALUE!' / '#GETTING_DATA';*/ |
| { |
| |
| return |
| RefConstant() |
| || Char('#','D','I','V','/','0','!') |
| || Char('#','N','/','A') |
| || Char('#','N','A','M','E','?') |
| || Char('#','N','U','L','L','!') |
| || Char('#','N','U','M','!') |
| || Char('#','V','A','L','U','E','!') |
| || Char("#GETTING_DATA"); |
| } |
| public bool LogicalConstant() /*LogicalConstant: 'FALSE' / 'TRUE';*/ |
| { |
| |
| return Char('F','A','L','S','E') || Char('T','R','U','E'); |
| } |
| public bool NumericalConstant() /*NumericalConstant: '-'? SignificandPart ExponentPart?;*/ |
| { |
| |
| return And(()=> |
| Option(()=> Char('-') ) |
| && SignificandPart() |
| && Option(()=> ExponentPart() ) ); |
| } |
| public bool SignificandPart() /*SignificandPart: WholeNumberPart FractionalPart? / FractionalPart;*/ |
| { |
| |
| return |
| And(()=> |
| WholeNumberPart() |
| && Option(()=> FractionalPart() ) ) |
| || FractionalPart(); |
| } |
| public bool WholeNumberPart() /*WholeNumberPart: [0-9]+;*/ |
| { |
| |
| return PlusRepeat(()=> In('0','9') ); |
| } |
| public bool FractionalPart() /*FractionalPart: '.' [0-9]*;*/ |
| { |
| |
| return And(()=> Char('.') && OptRepeat(()=> In('0','9') ) ); |
| } |
| public bool ExponentPart() /*ExponentPart: 'E' ('+' / '-')? [0-9]*;*/ |
| { |
| |
| return And(()=> |
| Char('E') |
| && Option(()=> Char('+') || Char('-') ) |
| && OptRepeat(()=> In('0','9') ) ); |
| } |
| public bool StringConstant() /*StringConstant: '"' ('""'/StringCharacter)* '"';*/ |
| { |
| |
| return And(()=> |
| Char('"') |
| && OptRepeat(()=> Char('"','"') || StringCharacter() ) |
| && Char('"') ); |
| } |
| public bool StringCharacter() /*StringCharacter: [#-~] / '!' / ' ' / HighCharacter;*/ |
| { |
| |
| return |
| In('#','~') |
| || Char('!') |
| || Char(' ') |
| || HighCharacter(); |
| } |
| public bool HighCharacter() /*HighCharacter: [#x80-#xFFFF];*/ |
| { |
| |
| return In('\u0080','\uffff'); |
| } |
| public bool ArrayConstant() /*^^ArrayConstant: '{' ConstantListRows '}';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.ArrayConstant,()=> |
| And(()=> Char('{') && ConstantListRows() && Char('}') ) ); |
| } |
| public bool ConstantListRows() /*ConstantListRows: ConstantListRow (';' ConstantListRow)*;*/ |
| { |
| |
| return And(()=> |
| ConstantListRow() |
| && OptRepeat(()=> |
| And(()=> Char(';') && ConstantListRow() ) ) ); |
| } |
| public bool ConstantListRow() /*^^ConstantListRow: Constant (',' Constant)*;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.ConstantListRow,()=> |
| And(()=> |
| Constant() |
| && OptRepeat(()=> And(()=> Char(',') && Constant() ) ) ) ); |
| } |
| public bool InfixOperator() /*InfixOperator: RefInfixOperator / ValueInfixOperator;*/ |
| { |
| |
| return RefInfixOperator() || ValueInfixOperator(); |
| } |
| public bool ValueInfixOperator() /*^^ValueInfixOperator: '<>' / '>=' / '<=' / '^' / '*' / '/' / '+' / '-' / '&' / '=' / '<' / '>';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.ValueInfixOperator,()=> |
| OneOfLiterals(optimizedLiterals0) ); |
| } |
| public bool RefInfixOperator() /*RefInfixOperator: RangeOperator / UnionOperator / IntersectionOperator;*/ |
| { |
| |
| return |
| RangeOperator() |
| || UnionOperator() |
| || IntersectionOperator(); |
| } |
| public bool UnionOperator() /*^^UnionOperator: ',';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.UnionOperator,()=> |
| Char(',') ); |
| } |
| public bool IntersectionOperator() /*^^IntersectionOperator: ' ';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.IntersectionOperator,()=> |
| Char(' ') ); |
| } |
| public bool RangeOperator() /*^^RangeOperator: ':';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.RangeOperator,()=> |
| Char(':') ); |
| } |
| public bool PostfixOperator() /*^^PostfixOperator: '%';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.PostfixOperator,()=> |
| Char('%') ); |
| } |
| public bool PrefixOperator() /*^^PrefixOperator: '+' / '-';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.PrefixOperator,()=> |
| Char('+') || Char('-') ); |
| } |
| public bool CellReference() /*CellReference: ExternalCellReference / LocalCellReference;*/ |
| { |
| |
| return ExternalCellReference() || LocalCellReference(); |
| } |
| public bool LocalCellReference() /*LocalCellReference: A1Reference;*/ |
| { |
| |
| return A1Reference(); |
| } |
| public bool ExternalCellReference() /*ExternalCellReference: BangReference / SheetRangeReference / SingleSheetReference;*/ |
| { |
| |
| return |
| BangReference() |
| || SheetRangeReference() |
| || SingleSheetReference(); |
| } |
| public bool BookPrefix() /*BookPrefix: WorkbookIndex '!';*/ |
| { |
| |
| return And(()=> WorkbookIndex() && Char('!') ); |
| } |
| public bool BangReference() /*BangReference: '!' (A1Reference / '#REF!');*/ |
| { |
| |
| return And(()=> |
| Char('!') |
| && ( A1Reference() || Char('#','R','E','F','!')) ); |
| } |
| public bool SheetRangeReference() /*SheetRangeReference: SheetRange '!' A1Reference;*/ |
| { |
| |
| return And(()=> SheetRange() && Char('!') && A1Reference() ); |
| } |
| public bool SingleSheetPrefix() /*SingleSheetPrefix: SingleSheet '!';*/ |
| { |
| |
| return And(()=> SingleSheet() && Char('!') ); |
| } |
| public bool SingleSheetReference() /*SingleSheetReference: SingleSheetPrefix (A1Reference / '#REF!');*/ |
| { |
| |
| return And(()=> |
| SingleSheetPrefix() |
| && ( A1Reference() || Char('#','R','E','F','!')) ); |
| } |
| public bool SingleSheetArea() /*SingleSheetArea: SingleSheetPrefix A1Area;*/ |
| { |
| |
| return And(()=> SingleSheetPrefix() && A1Area() ); |
| } |
| public bool SingleSheet() /*SingleSheet: WorkbookIndex? SheetName / '\'' WorkbookIndex? SheetNameSpecial '\'';*/ |
| { |
| |
| return |
| And(()=> |
| Option(()=> WorkbookIndex() ) |
| && SheetName() ) |
| || And(()=> |
| Char('\'') |
| && Option(()=> WorkbookIndex() ) |
| && SheetNameSpecial() |
| && Char('\'') ); |
| } |
| public bool SheetRange() /*SheetRange: WorkbookIndex? SheetName ':' SheetName / '\'' WorkbookIndex? SheetNameSpecial ':' SheetNameSpecial '\'';*/ |
| { |
| |
| return |
| And(()=> |
| Option(()=> WorkbookIndex() ) |
| && SheetName() |
| && Char(':') |
| && SheetName() ) |
| || And(()=> |
| Char('\'') |
| && Option(()=> WorkbookIndex() ) |
| && SheetNameSpecial() |
| && Char(':') |
| && SheetNameSpecial() |
| && Char('\'') ); |
| } |
| public bool WorkbookIndex() /*^^WorkbookIndex: '[' WholeNumberPart ']';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.WorkbookIndex,()=> |
| And(()=> Char('[') && WholeNumberPart() && Char(']') ) ); |
| } |
| public bool SheetName() /*^^SheetName: SheetNameCharacter+;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.SheetName,()=> |
| PlusRepeat(()=> SheetNameCharacter() ) ); |
| } |
| public bool SheetNameCharacter() /*SheetNameCharacter: [A-Za-z0-9._] / HighCharacter;*/ |
| { |
| |
| return |
| (In('A','Z', 'a','z', '0','9')||OneOf("._")) |
| || HighCharacter(); |
| } |
| public bool SheetNameSpecial() /*^^SheetNameSpecial: SheetNameBaseCharacter ('\'\''* SheetNameBaseCharacter)*;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.SheetNameSpecial,()=> |
| And(()=> |
| SheetNameBaseCharacter() |
| && OptRepeat(()=> |
| And(()=> |
| OptRepeat(()=> Char('\'','\'') ) |
| && SheetNameBaseCharacter() ) ) ) ); |
| } |
| public bool SheetNameBaseCharacter() /*SheetNameBaseCharacter: [A-Za-z0-9!"#$%&()+,-.;<=>@^_`{|}~ ] / HighCharacter;*/ |
| { |
| |
| return OneOf(optimizedCharset0) || HighCharacter(); |
| } |
| public bool A1Reference() /*^^A1Reference: (A1Column ':' A1Column) / (A1Row ':' A1Row) / A1Area / A1Cell;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.A1Reference,()=> |
| |
| And(()=> A1Column() && Char(':') && A1Column() ) |
| || And(()=> A1Row() && Char(':') && A1Row() ) |
| || A1Area() |
| || A1Cell() ); |
| } |
| public bool A1Cell() /*A1Cell: A1Column A1Row !NameCharacter;*/ |
| { |
| |
| return And(()=> |
| A1Column() |
| && A1Row() |
| && Not(()=> NameCharacter() ) ); |
| } |
| public bool A1Area() /*A1Area: A1Cell ':' A1Cell;*/ |
| { |
| |
| return And(()=> A1Cell() && Char(':') && A1Cell() ); |
| } |
| public bool A1Column() /*^^A1Column: A1AbsoluteColumn / A1RelativeColumn;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.A1Column,()=> |
| A1AbsoluteColumn() || A1RelativeColumn() ); |
| } |
| public bool A1AbsoluteColumn() /*A1AbsoluteColumn: '$' A1RelativeColumn;*/ |
| { |
| |
| return And(()=> Char('$') && A1RelativeColumn() ); |
| } |
| public bool A1RelativeColumn() /*A1RelativeColumn: 'XF' [A-D] / 'X' [A-E] [A-Z] / [A-W][A-Z][A-Z] / [A-Z][A-Z] / [A-Z];*/ |
| { |
| |
| return |
| And(()=> Char('X','F') && In('A','D') ) |
| || And(()=> Char('X') && In('A','E') && In('A','Z') ) |
| || And(()=> In('A','W') && In('A','Z') && In('A','Z') ) |
| || And(()=> In('A','Z') && In('A','Z') ) |
| || In('A','Z'); |
| } |
| public bool A1Row() /*^^A1Row: A1AbsoluteRow / A1RelativeRow;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.A1Row,()=> |
| A1AbsoluteRow() || A1RelativeRow() ); |
| } |
| public bool A1AbsoluteRow() /*A1AbsoluteRow: '$' A1RelativeRow;*/ |
| { |
| |
| return And(()=> Char('$') && A1RelativeRow() ); |
| } |
| public bool A1RelativeRow() /*A1RelativeRow: [1-9][0-9]*;*/ |
| { |
| |
| return And(()=> In('1','9') && OptRepeat(()=> In('0','9') ) ); |
| } |
| public bool CellFunctionCall() /*^^CellFunctionCall: A1Cell '(' ArgumentList ')';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.CellFunctionCall,()=> |
| And(()=> |
| A1Cell() |
| && Char('(') |
| && ArgumentList() |
| && Char(')') ) ); |
| } |
| public bool UserDefinedFunctionCall() /*^^UserDefinedFunctionCall: UserDefinedFunctionName '(' ArgumentList ')';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.UserDefinedFunctionCall,()=> |
| And(()=> |
| UserDefinedFunctionName() |
| && Char('(') |
| && ArgumentList() |
| && Char(')') ) ); |
| } |
| public bool UserDefinedFunctionName() /*UserDefinedFunctionName: NameReference;*/ |
| { |
| |
| return NameReference(); |
| } |
| public bool ArgumentList() /*ArgumentList: Argument (',' Argument)*;*/ |
| { |
| |
| return And(()=> |
| Argument() |
| && OptRepeat(()=> And(()=> Char(',') && Argument() ) ) ); |
| } |
| public bool Argument() /*Argument: ArgumentExpression / ws;*/ |
| { |
| |
| return ArgumentExpression() || ws(); |
| } |
| public bool ArgumentExpression() /*^^ArgumentExpression: ws ArgumentInfixTerms;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.ArgumentExpression,()=> |
| And(()=> ws() && ArgumentInfixTerms() ) ); |
| } |
| public bool ArgumentInfixTerms() /*ArgumentInfixTerms: ArgumentPreAndPostTerm (ArgumentInfixOperator ws ArgumentPreAndPostTerm)*;*/ |
| { |
| |
| return And(()=> |
| ArgumentPreAndPostTerm() |
| && OptRepeat(()=> |
| And(()=> |
| ArgumentInfixOperator() |
| && ws() |
| && ArgumentPreAndPostTerm() ) ) ); |
| } |
| public bool ArgumentPreAndPostTerm() /*ArgumentPreAndPostTerm: (PrefixOperator ws)* ArgumentTerm (PostfixOperator ws)*;*/ |
| { |
| |
| return And(()=> |
| OptRepeat(()=> And(()=> PrefixOperator() && ws() ) ) |
| && ArgumentTerm() |
| && OptRepeat(()=> And(()=> PostfixOperator() && ws() ) ) ); |
| } |
| public bool ArgumentTerm() /*ArgumentTerm: (ArgumentRefInfixTerms / '(' Expression ')' / Constant) ws;*/ |
| { |
| |
| return And(()=> |
| ( |
| ArgumentRefInfixTerms() |
| || And(()=> Char('(') && Expression() && Char(')') ) |
| || Constant()) |
| && ws() ); |
| } |
| public bool ArgumentRefInfixTerms() /*ArgumentRefInfixTerms: ArgumentRefTerm (RefArgumentInfixOperator ws ArgumentRefTerm)*;*/ |
| { |
| |
| return And(()=> |
| ArgumentRefTerm() |
| && OptRepeat(()=> |
| And(()=> |
| RefArgumentInfixOperator() |
| && ws() |
| && ArgumentRefTerm() ) ) ); |
| } |
| public bool ArgumentRefTerm() /*ArgumentRefTerm: '(' ws RefInfixTerms ')' / RefConstant / CellFunctionCall / CellReference / UserDefinedFunctionCall |
| / NameReference / StructureReference;*/ |
| { |
| |
| return |
| And(()=> |
| Char('(') |
| && ws() |
| && RefInfixTerms() |
| && Char(')') ) |
| || RefConstant() |
| || CellFunctionCall() |
| || CellReference() |
| || UserDefinedFunctionCall() |
| || NameReference() |
| || StructureReference(); |
| } |
| public bool ArgumentInfixOperator() /*ArgumentInfixOperator: RefArgumentInfixOperator / ValueInfixOperator;*/ |
| { |
| |
| return RefArgumentInfixOperator() || ValueInfixOperator(); |
| } |
| public bool RefArgumentInfixOperator() /*RefArgumentInfixOperator: RangeOperator / IntersectionOperator;*/ |
| { |
| |
| return RangeOperator() || IntersectionOperator(); |
| } |
| public bool NameReference() /*^^NameReference: (ExternalName / Name) !'[';*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.NameReference,()=> |
| And(()=> |
| ( ExternalName() || Name()) |
| && Not(()=> Char('[') ) ) ); |
| } |
| public bool ExternalName() /*ExternalName: BangName / (SingleSheetPrefix / BookPrefix) Name;*/ |
| { |
| |
| return |
| BangName() |
| || And(()=> |
| ( SingleSheetPrefix() || BookPrefix()) |
| && Name() ); |
| } |
| public bool BangName() /*BangName: '!' Name;*/ |
| { |
| |
| return And(()=> Char('!') && Name() ); |
| } |
| public bool Name() /*Name: NameStartCharacter NameCharacter*;*/ |
| { |
| |
| return And(()=> |
| NameStartCharacter() |
| && OptRepeat(()=> NameCharacter() ) ); |
| } |
| public bool NameStartCharacter() /*NameStartCharacter: [_\\A-Za-z] / HighCharacter;*/ |
| { |
| |
| return |
| (In('A','Z', 'a','z')||OneOf("_\\")) |
| || HighCharacter(); |
| } |
| public bool NameCharacter() /*NameCharacter: NameStartCharacter / [0-9] / '.' / '?' / HighCharacter;*/ |
| { |
| |
| return |
| NameStartCharacter() |
| || In('0','9') |
| || Char('.') |
| || Char('?') |
| || HighCharacter(); |
| } |
| public bool StructureReference() /*^^StructureReference: TableIdentifier? IntraTableReference;*/ |
| { |
| |
| return TreeNT((int)EExcelFormula.StructureReference,()=> |
| And(()=> |
| Option(()=> TableIdentifier() ) |
| && IntraTableReference() ) ); |
| } |
| public bool TableIdentifier() /*TableIdentifier: BookPrefix? TableName;*/ |
| { |
| |
| return And(()=> Option(()=> BookPrefix() ) && TableName() ); |
| } |
| public bool TableName() /*TableName: Name;*/ |
| { |
| |
| return Name(); |
| } |
| public bool IntraTableReference() /*IntraTableReference: SpacedLBracket InnerReference SpacedRBracket / Keyword / '[' SimpleColumnName ']';*/ |
| { |
| |
| return |
| And(()=> |
| SpacedLBracket() |
| && InnerReference() |
| && SpacedRBracket() ) |
| || Keyword() |
| || And(()=> |
| Char('[') |
| && SimpleColumnName() |
| && Char(']') ); |
| } |
| public bool InnerReference() /*InnerReference: (KeywordList SpacedComma)? ColumnRange / KeywordList;*/ |
| { |
| |
| return |
| And(()=> |
| Option(()=> |
| And(()=> KeywordList() && SpacedComma() ) ) |
| && ColumnRange() ) |
| || KeywordList(); |
| } |
| public bool Keyword() /*Keyword: '[#All]' / '[#Data]' / '[#Headers]' / '[#Totals]' / '[#This Row]';*/ |
| { |
| |
| return |
| Char('[','#','A','l','l',']') |
| || Char('[','#','D','a','t','a',']') |
| || Char("[#Headers]") |
| || Char("[#Totals]") |
| || Char("[#This Row]"); |
| } |
| public bool KeywordList() /*KeywordList: '[#Headers]' SpacedComma '[#Data]' / '[#Data]' SpacedComma '[#Totals]' / Keyword;*/ |
| { |
| |
| return |
| And(()=> |
| Char("[#Headers]") |
| && SpacedComma() |
| && Char('[','#','D','a','t','a',']') ) |
| || And(()=> |
| Char('[','#','D','a','t','a',']') |
| && SpacedComma() |
| && Char("[#Totals]") ) |
| || Keyword(); |
| } |
| public bool ColumnRange() /*ColumnRange: Column (':' Column)?;*/ |
| { |
| |
| return And(()=> |
| Column() |
| && Option(()=> And(()=> Char(':') && Column() ) ) ); |
| } |
| public bool Column() /*Column: '[' ws SimpleColumnName ws ']' / SimpleColumnName;*/ |
| { |
| |
| return |
| And(()=> |
| Char('[') |
| && ws() |
| && SimpleColumnName() |
| && ws() |
| && Char(']') ) |
| || SimpleColumnName(); |
| } |
| public bool SimpleColumnName() /*SimpleColumnName: AnyNoSpaceColumnCharacter+ (ws AnyNoSpaceColumnCharacter+)*;*/ |
| { |
| |
| return And(()=> |
| PlusRepeat(()=> AnyNoSpaceColumnCharacter() ) |
| && OptRepeat(()=> |
| And(()=> |
| ws() |
| && PlusRepeat(()=> AnyNoSpaceColumnCharacter() ) ) ) ); |
| } |
| public bool EscapeColumnCharacter() /*EscapeColumnCharacter: '\'' / '#' / '[' / ']';*/ |
| { |
| |
| return Char('\'') || Char('#') || Char('[') || Char(']'); |
| } |
| public bool UnescapedColumnCharacter() /*UnescapedColumnCharacter: [A-Za-z0-9!"#$%&()*+,-./:;<=>?@\\^_`{|}~] / HighCharacter;*/ |
| { |
| |
| return OneOf(optimizedCharset1) || HighCharacter(); |
| } |
| public bool AnyNoSpaceColumnCharacter() /*AnyNoSpaceColumnCharacter: ('\'' EscapeColumnCharacter) / UnescapedColumnCharacter;*/ |
| { |
| |
| return |
| And(()=> Char('\'') && EscapeColumnCharacter() ) |
| || UnescapedColumnCharacter(); |
| } |
| public bool SpacedComma() /*SpacedComma: ' '? ',' ' '?;*/ |
| { |
| |
| return And(()=> |
| Option(()=> Char(' ') ) |
| && Char(',') |
| && Option(()=> Char(' ') ) ); |
| } |
| public bool SpacedLBracket() /*SpacedLBracket: '[' ' '?;*/ |
| { |
| |
| return And(()=> Char('[') && Option(()=> Char(' ') ) ); |
| } |
| public bool SpacedRBracket() /*SpacedRBracket: ' '? ']';*/ |
| { |
| |
| return And(()=> Option(()=> Char(' ') ) && Char(']') ); |
| } |
| public bool ws() /*ws: ' '*;*/ |
| { |
| |
| return OptRepeat(()=> Char(' ') ); |
| } |
| #endregion Grammar Rules |
| |
| #region Optimization Data |
| internal static OptimizedCharset optimizedCharset0; |
| internal static OptimizedCharset optimizedCharset1; |
| |
| internal static OptimizedLiterals optimizedLiterals0; |
| |
| static ExcelFormula() |
| { |
| { |
| OptimizedCharset.Range[] ranges = new OptimizedCharset.Range[] |
| {new OptimizedCharset.Range('A','Z'), |
| new OptimizedCharset.Range('a','z'), |
| new OptimizedCharset.Range('0','9'), |
| new OptimizedCharset.Range(',','.'), |
| }; |
| char[] oneOfChars = new char[] {'!','"','#','$','%' |
| ,'&','(',')','+',';' |
| ,'<','=','>','@','^' |
| ,'_','`','{','|','}' |
| ,'~',' '}; |
| optimizedCharset0= new OptimizedCharset(ranges,oneOfChars); |
| } |
| |
| { |
| OptimizedCharset.Range[] ranges = new OptimizedCharset.Range[] |
| {new OptimizedCharset.Range('A','Z'), |
| new OptimizedCharset.Range('a','z'), |
| new OptimizedCharset.Range('0','9'), |
| new OptimizedCharset.Range(',','.'), |
| }; |
| char[] oneOfChars = new char[] {'!','"','#','$','%' |
| ,'&','(',')','*','+' |
| ,'/',':',';','<','=' |
| ,'>','?','@','\\','^' |
| ,'_','`','{','|','}' |
| ,'~'}; |
| optimizedCharset1= new OptimizedCharset(ranges,oneOfChars); |
| } |
| |
| |
| { |
| string[] literals= |
| { "<>",">=","<=","^","*","/","+","-", |
| "&","=","<",">" }; |
| optimizedLiterals0= new OptimizedLiterals(literals); |
| } |
| |
| |
| } |
| #endregion Optimization Data |
| } |
| } |