public PrecedenceBasedParserAction(BnfTerm shiftTerm, ParserState newShiftState, Production reduceProduction) { _reduceAction = new ReduceParserAction(reduceProduction); var reduceEntry = new ConditionalEntry(CheckMustReduce, _reduceAction, "(Precedence comparison)"); base.ConditionalEntries.Add(reduceEntry); base.DefaultAction = _shiftAction = new ShiftParserAction(shiftTerm, newShiftState); }
/// <summary>Factory method for creating a proper type of reduce parser action. </summary> /// <param name="production">A Production to reduce.</param> /// <returns>Reduce action.</returns> public static ReduceParserAction Create(Production production) { var nonTerm = production.LValue; //List builder (non-empty production for list non-terminal) is a special case var isList = nonTerm.Flags.IsSet(TermFlags.IsList); var isListBuilderProduction = isList && production.RValues.Count > 0 && production.RValues[0] == production.LValue; if (isListBuilderProduction) return new ReduceListBuilderParserAction(production); else if (nonTerm.Flags.IsSet(TermFlags.IsListContainer)) return new ReduceListContainerParserAction(production); else if (nonTerm.Flags.IsSet(TermFlags.IsTransient)) return new ReduceTransientParserAction(production); else return new ReduceParserAction(production); }
public ReduceParserAction(Production production) { Production = production; }
public ReduceListContainerParserAction(Production production) : base(production) { }
public ReduceTransientParserAction(Production production) : base(production) { }
public ReduceListBuilderParserAction(Production production) : base(production) { }
public ReducedEventArgs(ParsingContext context, Production reducedProduction, ParseTreeNode resultNode) : base(context) { ReducedProduction = reducedProduction; ResultNode = resultNode; }
internal void OnReduced(ParsingContext context, Production reducedProduction, ParseTreeNode resultNode) { Reduced?.Invoke(this, new ReducedEventArgs(context, reducedProduction, resultNode)); }
internal void ChangeToOperatorAction(Production reduceProduction) { ActionType = ParserActionType.Operator; ReduceProduction = reduceProduction; }
internal ParserAction(ParserState newState, Production reduceProduction, Action <ConflictResolutionArgs> conflictResolver) : this(ParserActionType.Code, newState, reduceProduction) { ConflictResolver = conflictResolver; }