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);
 }
Esempio n. 2
0
 /// <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);
 }
Esempio n. 3
0
 public ReduceParserAction(Production production)
 {
     Production = production;
 }
Esempio n. 4
0
 public ReduceListContainerParserAction(Production production)
     : base(production)
 {
 }
Esempio n. 5
0
 public ReduceTransientParserAction(Production production)
     : base(production)
 {
 }
Esempio n. 6
0
 public ReduceListBuilderParserAction(Production production)
     : base(production)
 {
 }
Esempio n. 7
0
 public ReducedEventArgs(ParsingContext context, Production reducedProduction, ParseTreeNode resultNode)
     : base(context)
 {
     ReducedProduction = reducedProduction;
       ResultNode = resultNode;
 }
Esempio n. 8
0
 internal void OnReduced(ParsingContext context, Production reducedProduction, ParseTreeNode resultNode)
 {
     Reduced?.Invoke(this, new ReducedEventArgs(context, reducedProduction, resultNode));
 }
Esempio n. 9
0
 internal void ChangeToOperatorAction(Production reduceProduction)
 {
     ActionType       = ParserActionType.Operator;
     ReduceProduction = reduceProduction;
 }
Esempio n. 10
0
 internal ParserAction(ParserState newState, Production reduceProduction, Action <ConflictResolutionArgs> conflictResolver)
     : this(ParserActionType.Code, newState, reduceProduction)
 {
     ConflictResolver = conflictResolver;
 }