void _Parser_OnReduce(LALRParser parser, ReduceEventArgs args) { Func <Parser, NonterminalToken, object> handler; if (Internal.GrammarRules.Handlers.TryGetValue((RuleConstants)args.Rule.Id, out handler)) { try { args.Token.UserObject = handler(this, args.Token); } catch (Exception ex) { Errors.Add(string.Format("{0}: {1}", args.Rule.ToString(), ex.Message)); args.Continue = false; } return; } //This may happen for things that are not implemented yet because they //"unbalance" the AST if (args.Token.Tokens.Length != 1) { Errors.Add(string.Format("{0}: Internal problem", args.Rule.ToString())); args.Continue = false; return; } args.Token.UserObject = args.Token.Tokens[0].UserObject; }
/// <summary> /// Event handler for the reduce action. /// </summary> /// <param name="parser">parser that is the source of this event</param> /// <param name="args">event arguments</param> private void ReduceEvent(LALRParser parser, ReduceEventArgs args) { //WriteLn(args.Rule.Id.ToString()); //WriteLn(args.Rule.Lhs.Id.ToString()); AddViewItem("Reduce", null, args.Token.Rule.ToString(), "", args.NewState.Id.ToString(), 2); }
private void ReduceEvent(LALRParser parser, ReduceEventArgs args) { try { args.Token.UserObject = CreateObject(args.Token); } catch (ApplicationException ex) { args.Continue = false; Logger.Log(DateTime.Now + ": " + ex.Message); //todo: Report message to UI? } }
private void ReductionEvent(ReduceEventArgs pValue) { switch (pValue.Token.Symbol.ToString()) { case "<Value>": string Value = ""; //pValue.Token.Tokens[0].ToString().Trim(new char[] { '{', '}' }); //System.Console.Write(Value); this.NodeStack.Push(new TreeNode(Value)); break; case "<Negate Exp>": System.Collections.Generic.LinkedListNode <string> Node = new System.Collections.Generic.LinkedListNode <string>("-"); //System.Console.Write("-"); TreeNode NegateNode = new TreeNode("-"); NegateNode.Right = this.NodeStack.Pop(); this.NodeStack.Push(NegateNode); break; case "<Add Exp>": //System.Console.Write("+"); TreeNode AddExpNode = new TreeNode("+"); AddExpNode.Right = this.NodeStack.Pop(); AddExpNode.Left = this.NodeStack.Pop(); this.NodeStack.Push(AddExpNode); break; case "<Assign_Statement>": string Identifier = ""; //args.Token.Tokens[0].ToString().Trim(new char[] { '[', ']' }); //System.Console.Write(Identifier); //System.Console.Write("="); TreeNode AssignNode = new TreeNode("="); this.TreeList.GetLast().Right = AssignNode; AssignNode.Right = this.NodeStack.Pop(); AssignNode.Left = new TreeNode(Identifier); this.NodeStack.Push(AssignNode); break; case "<Statement>": TreeNode Statement = new TreeNode("statement\n"); Statement.Right = this.NodeStack.Pop(); Statement.Left = this.NodeStack.Pop(); this.NodeStack.Push(Statement); break; case "<StatementList>": TreeNode StatementList = new TreeNode("sl\n"); StatementList.Right = this.NodeStack.Pop(); StatementList.Left = this.NodeStack.Pop(); this.NodeStack.Push(StatementList); break; case "<Program>": TreeNode Program = new TreeNode("program"); Program.Right = this.NodeStack.Pop(); Program.Left = this.NodeStack.Pop(); this.NodeStack.Push(Program); break; default: System.Console.WriteLine(pValue.Token.Symbol.ToString()); break; } }
private static void P_OnReduce(LALRParser parser, ReduceEventArgs args) { // Console.WriteLine(args.Token.Tokens.Length); // abc2.Add(args.Token); }