Esempio n. 1
0
        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;
        }
Esempio n. 2
0
 /// <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?
     }
 }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
 private static void P_OnReduce(LALRParser parser, ReduceEventArgs args)
 {
     //   Console.WriteLine(args.Token.Tokens.Length);
     //     abc2.Add(args.Token);
 }