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.

Last updated