Skip to content

Repository files navigation

my-parser

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;}}

About

Parser de qualquer coisa

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages