// 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; }
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); } }