Silverfly
  • Welcome
  • Getting Started
    • Quickstart
    • Tokens
  • Basics
    • Lexer
      • Matcher
        • IgnoreMatcher
        • Custom Matcher
    • Parser
      • Parselet
    • Traverse the Tree
    • Read Eval Print Loop
    • Looking at the tree
  • Experts
    • Custom Naming Rules
    • Tree Rewriting
  • Guides
    • JSON
    • Parsing Predecesors
    • Using Multiple Tokens As Operators
  • Support
Powered by GitBook
On this page
  1. Basics
  2. Parser

Parselet

Parselets are small components that represents and builds special kind of syntax parts (e.g. Assignments, Function Calls, Class Declarations).

You can use predefined parselets to parse prefix/postfix, binary and ternary operators. You can specifiy the binding power (how strong will be the operator applied) and associativity (left->right or right->left).

To attach parselets to your parser you can use helper methods.

If a parselt is already registered it will replaced by the new parselet.

protected override void InitParser(ParserDefinition parserDefinition)
    {
        parserDefinition.Register(PredefinedSymbols.Name, new NameParselet());

        parserDefinition.Register("(", new CallParselet(BindingPowers.Get("Call").Id));

        parserDefinition.Ternary("?", ":", "Conditional");

        parserDefinition.AddArithmeticOperators();
        parserDefinition.AddBitOperators();
        parserDefinition.AddLogicalOperators();
        parserDefinition.AddCommonLiterals();
        parserDefinition.AddCommonAssignmentOperators();

        parserDefinition.Prefix("not");
        parserDefinition.Postfix("!");

        parserDefinition.InfixRight("^", "Exponent");

        parserDefinition.InfixLeft("->", "Product");

        parserDefinition.Block(PredefinedSymbols.SOF, PredefinedSymbols.EOF,
            seperator: PredefinedSymbols.Semicolon);
    }

The sample above uses several different helper methods. A Block parses a list of expressions.

PreviousParserNextTraverse the Tree

Last updated 9 months ago