Parser de qualquer coisa
Exemplo de uso
classCalcSample{voidMain(){vargrammar=newCalcTwoNumbersGrammar();varinputCode="437 + 734";varcompiler=newMyCompiler<CalcTwoNumbersObject>(grammar,CalcTwoNumbersObject.Emitter);varcalc=compiler.Compile(inputCode);varresult=calc.CalcNumbers();Assert.Equal(1171,result);}}Definição da gramática:
publicclassCalcTwoNumbersGrammar:MyGrammar{publicCalcTwoNumbersGrammar(){RootElement=newGrammarElements.SumExpressionGrammarElement();OnLexerDiscard=DoLexerDiscard;}privateboolDoLexerDiscard(Charelement){varignorableChars=newchar[]{'\n','\r','\t',' '};returnignorableChars.Contains(element);}}Classes gramaticais:
publicenumCalcTwoNumbersTokenClass{SUM_EXPRESSION,NUM,PLUS}Elementos gramaticais:
publicclassSumExpressionGrammarElement:Grammar.CommonElements.GroupAndGrammarElement{privatestaticMyGrammarElement[]ExpressionElements=newMyGrammarElement[]{newNumberGrammarElement(),newPlusGrammarElement(),newNumberGrammarElement()};publicSumExpressionGrammarElement():base(ExpressionElements){}publicoverrideobjectGetTokenClass(){returnCalcTwoNumbersTokenClass.SUM_EXPRESSION;}publicoverrideSyntaxTreeNodeMake(ObjectStream<MyToken>input,MyDiscardDelegate<MyToken>discarder){/* Código de construção do nó sintático */}}publicclassNumberGrammarElement:Grammar.CommonElements.NumberGrammarElement{publicoverrideobjectGetTokenClass(){returnCalcTwoNumbersTokenClass.NUM;}}publicclassPlusGrammarElement:Grammar.CommonElements.CharacterGrammarElement{publicPlusGrammarElement():base('+'){}publicoverrideobjectGetTokenClass(){returnCalcTwoNumbersTokenClass.PLUS;}}