// throws RecognitionException [1]
    // $ANTLR start "tikzdocument"
    // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:140:1: tikzdocument : ( dontcare_preamble | tikz_styleorsetorcmd | otherbegin )* tikzpicture ( . )* -> ^( IM_DOCUMENT ( tikz_styleorsetorcmd )* tikzpicture ) ;
    public simpletikzParser.tikzdocument_return tikzdocument()
    {
        simpletikzParser.tikzdocument_return retval = new simpletikzParser.tikzdocument_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken wildcard5 = null;
        simpletikzParser.dontcare_preamble_return dontcare_preamble1 = default(simpletikzParser.dontcare_preamble_return);

        simpletikzParser.tikz_styleorsetorcmd_return tikz_styleorsetorcmd2 = default(simpletikzParser.tikz_styleorsetorcmd_return);

        simpletikzParser.otherbegin_return otherbegin3 = default(simpletikzParser.otherbegin_return);

        simpletikzParser.tikzpicture_return tikzpicture4 = default(simpletikzParser.tikzpicture_return);

        // object wildcard5_tree=null;
        RewriteRuleSubtreeStream stream_dontcare_preamble = new RewriteRuleSubtreeStream(adaptor,"rule dontcare_preamble");
        RewriteRuleSubtreeStream stream_tikzpicture = new RewriteRuleSubtreeStream(adaptor,"rule tikzpicture");
        RewriteRuleSubtreeStream stream_otherbegin = new RewriteRuleSubtreeStream(adaptor,"rule otherbegin");
        RewriteRuleSubtreeStream stream_tikz_styleorsetorcmd = new RewriteRuleSubtreeStream(adaptor,"rule tikz_styleorsetorcmd");
        try
        {
            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:2: ( ( dontcare_preamble | tikz_styleorsetorcmd | otherbegin )* tikzpicture ( . )* -> ^( IM_DOCUMENT ( tikz_styleorsetorcmd )* tikzpicture ) )
            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:4: ( dontcare_preamble | tikz_styleorsetorcmd | otherbegin )* tikzpicture ( . )*
            {
                // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:4: ( dontcare_preamble | tikz_styleorsetorcmd | otherbegin )*
                do
                {
                    int alt1 = 4;
                    switch ( input.LA(1) )
                    {
                    case 39:
                        {
                        int LA1_1 = input.LA(2);

                        if ( (LA1_1 == 43) )
                        {
                            int LA1_5 = input.LA(3);

                            if ( (LA1_5 == ID) )
                            {
                                alt1 = 3;
                            }

                        }

                        }
                        break;
                    case IM_PATH:
                    case IM_NODE:
                    case IM_COORD:
                    case IM_SIZE:
                    case IM_NODENAME:
                    case IM_NUMBERUNIT:
                    case IM_PICTURE:
                    case IM_DOCUMENT:
                    case IM_SCOPE:
                    case IM_STARTTAG:
                    case IM_ENDTAG:
                    case IM_OPTIONS:
                    case IM_OPTION_STYLE:
                    case IM_OPTION_KV:
                    case IM_ID:
                    case IM_TIKZSET:
                    case IM_USETIKZLIB:
                    case IM_STRING:
                    case IM_STYLE:
                    case IM_CONTROLS:
                    case IM_TIKZEDT_CMD:
                    case IM_DONTCARE:
                    case IM_ARC:
                    case ID:
                    case COMMAND:
                    case FLOAT_WO_EXP:
                    case INT:
                    case WS:
                    case COMMENT:
                    case EXPONENT:
                    case ESC_SEQ:
                    case MATHSTRING:
                    case SOMETHING:
                    case SOMETHING1:
                    case 43:
                    case 44:
                    case 45:
                    case 46:
                    case 47:
                    case 48:
                    case 49:
                    case 50:
                    case 51:
                    case 52:
                    case 53:
                    case 54:
                    case 55:
                    case 56:
                    case 57:
                    case 58:
                    case 59:
                    case 60:
                    case 61:
                    case 62:
                    case 63:
                    case 64:
                    case 65:
                    case 66:
                    case 67:
                    case 68:
                    case 69:
                    case 70:
                    case 71:
                    case 72:
                    case 73:
                    case 74:
                    case 75:
                    case 76:
                    case 77:
                    case 78:
                    case 79:
                    case 80:
                    case 81:
                    case 82:
                    case 83:
                    case 84:
                    case 85:
                    case 86:
                    case 87:
                    case 88:
                    case 89:
                    case 90:
                    case 91:
                    case 92:
                    case 93:
                    case 94:
                        {
                        alt1 = 1;
                        }
                        break;
                    case TIKZEDT_CMD_COMMENT:
                    case 40:
                    case 41:
                        {
                        alt1 = 2;
                        }
                        break;

                    }

                    switch (alt1)
                    {
                        case 1 :
                            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:5: dontcare_preamble
                            {
                                PushFollow(FOLLOW_dontcare_preamble_in_tikzdocument257);
                                dontcare_preamble1 = dontcare_preamble();
                                state.followingStackPointer--;
                                if (state.failed) return retval;
                                if ( state.backtracking==0 ) stream_dontcare_preamble.Add(dontcare_preamble1.Tree);

                            }
                            break;
                        case 2 :
                            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:25: tikz_styleorsetorcmd
                            {
                                PushFollow(FOLLOW_tikz_styleorsetorcmd_in_tikzdocument261);
                                tikz_styleorsetorcmd2 = tikz_styleorsetorcmd();
                                state.followingStackPointer--;
                                if (state.failed) return retval;
                                if ( state.backtracking==0 ) stream_tikz_styleorsetorcmd.Add(tikz_styleorsetorcmd2.Tree);

                            }
                            break;
                        case 3 :
                            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:48: otherbegin
                            {
                                PushFollow(FOLLOW_otherbegin_in_tikzdocument265);
                                otherbegin3 = otherbegin();
                                state.followingStackPointer--;
                                if (state.failed) return retval;
                                if ( state.backtracking==0 ) stream_otherbegin.Add(otherbegin3.Tree);

                            }
                            break;

                        default:
                            goto loop1;
                    }
                } while (true);

                loop1:
                    ;	// Stops C# compiler whining that label 'loop1' has no statements

                PushFollow(FOLLOW_tikzpicture_in_tikzdocument270);
                tikzpicture4 = tikzpicture();
                state.followingStackPointer--;
                if (state.failed) return retval;
                if ( state.backtracking==0 ) stream_tikzpicture.Add(tikzpicture4.Tree);
                // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:74: ( . )*
                do
                {
                    int alt2 = 2;
                    int LA2_0 = input.LA(1);

                    if ( ((LA2_0 >= IM_PATH && LA2_0 <= 94)) )
                    {
                        alt2 = 1;
                    }
                    else if ( (LA2_0 == EOF) )
                    {
                        alt2 = 2;
                    }

                    switch (alt2)
                    {
                        case 1 :
                            // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:74: .
                            {
                                wildcard5 = (IToken)input.LT(1);
                                MatchAny(input); if (state.failed) return retval;

                            }
                            break;

                        default:
                            goto loop2;
                    }
                } while (true);

                loop2:
                    ;	// Stops C# compiler whining that label 'loop2' has no statements

                // AST REWRITE
                // elements:          tikzpicture, tikz_styleorsetorcmd
                // token labels:
                // rule labels:       retval
                // token list labels:
                // rule list labels:
                if ( state.backtracking==0 ) {
                retval.Tree = root_0;
                RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "token retval", (retval!=null ? retval.Tree : null));

                root_0 = (object)adaptor.GetNilNode();
                // 141:77: -> ^( IM_DOCUMENT ( tikz_styleorsetorcmd )* tikzpicture )
                {
                    // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:80: ^( IM_DOCUMENT ( tikz_styleorsetorcmd )* tikzpicture )
                    {
                    object root_1 = (object)adaptor.GetNilNode();
                    root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(IM_DOCUMENT, "IM_DOCUMENT"), root_1);

                    // C:\\_TUHH\\SVN\\projects\\wsn\\dibus\\SvgMap\\SvgNaviMap\\bargraph\\tikzedt\\TikzParser\\simpletikz.g:141:94: ( tikz_styleorsetorcmd )*
                    while ( stream_tikz_styleorsetorcmd.HasNext() )
                    {
                        adaptor.AddChild(root_1, stream_tikz_styleorsetorcmd.NextTree());

                    }
                    stream_tikz_styleorsetorcmd.Reset();
                    adaptor.AddChild(root_1, stream_tikzpicture.NextTree());

                    adaptor.AddChild(root_0, root_1);
                    }

                }

                retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( state.backtracking==0 )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
                adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }

            catch (RecognitionException e) {
                throw e;
            }
        finally
        {
        }
        return retval;
    }
Exemple #2
0
        public static Tikz_ParseTree Parse(string code)
        {
            code = PrepareCodeForParsing(code);

            //if code is empty to bother ANTLR (it will raise an exception)
            if (code.Trim() == "")
            {
                return(null);
            }

            simpletikzLexer   lex    = new simpletikzLexer(new ANTLRStringStream(code));
            CommonTokenStream tokens = new CommonTokenStream(lex);

            //for (int i = 0; i < tokens.Count; i++)
            //{
            //    string ds = tokens.Get(i).Text;
            //    ds = ds + "eee";
            //}

            simpletikzParser parser = new simpletikzParser(tokens);

            //tikzgrammarParser.expr_return r =
            simpletikzParser.tikzdocument_return ret = parser.tikzdocument();

            //CommonTreeAdaptor adaptor = new CommonTreeAdaptor();
            CommonTree t = (CommonTree)ret.Tree;
            //MessageBox.Show(printTree(t,0));



/*
 *      public string printTree(CommonTree t, int indent)
 *      {
 *          string s="";
 *          if ( t != null ) {
 *                      for ( int i = 0; i < indent; i++ )
 *                              s = s+"   ";
 *
 *              string r = "";// s + t.ToString() + "\r\n";
 *
 *              if (t.ChildCount >0)
 *                          foreach ( object o in t.Children ) {
 *                                  r=r+s+o.ToString()+"\r\n" + printTree((CommonTree)o, indent+1);
 *                  }
 *
 *              return r;
 *          }  else return "";
 *              }
 *  }*/


            Tikz_ParseTree root = new Tikz_ParseTree();

            bool success = FillItem(root, t, tokens);


            // mockup
            //t.Children.Add(new Tikz_Node(0, 0));
            //t.Children.Add(new Tikz_Node(5, 5));
            //t.Children.Add(new Tikz_Node(6, 8));
            //t.Children.Add(new Tikz_Node(8, 8));
            if (success)
            {
                root.RegisterNodeAndStyleRefs(); // make a list with all node names for later reference
                return(root);
            }
            else
            {
                return(null);
            }
        }