3bed642d004d288dcb192fb2bf6afa45c574febe
[external/ragel.git] / rlcodegen / xmlparse.kh
1 /*
2  *  Copyright 2001-2007 Adrian Thurston <thurston@cs.queensu.ca>
3  */
4
5 /*  This file is part of Ragel.
6  *
7  *  Ragel is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  * 
12  *  Ragel is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  * 
17  *  You should have received a copy of the GNU General Public License
18  *  along with Ragel; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
20  */
21 #ifndef _XMLPARSE_H
22 #define _XMLPARSE_H
23
24 #include "vector.h"
25 #include "rlcodegen.h"
26 #include "gendata.h"
27 #include <iostream>
28
29 using std::ostream;
30
31 struct XMLTagHashPair
32 {
33     char *name;
34     int id;
35 };
36
37 struct Token
38 {
39         XMLTag *tag;
40         InputLoc loc;
41 };
42
43 struct InlineItem;
44 struct InlineList;
45
46 struct LmSwitchVect;
47 struct LmSwitchAction;
48
49 //#include "xmlpdefs.h"
50
51 /* These come from the scanner and point back into the parser. We will borrow
52  * them for error reporting. */
53 //extern YYSTYPE *yylval;
54 //extern YYLTYPE *yylloc;
55
56 //int yylex( YYSTYPE *, YYLTYPE *);
57 void scannerInit();
58
59 extern char *lelNames[];
60
61 struct LangEl;
62
63 struct Parser
64 {
65         %%{
66                 parser Parser;
67
68                 token TAG_unknown, TAG_ragel, TAG_ragel_def, TAG_host, TAG_state_list,
69                         TAG_state, TAG_trans_list, TAG_t, TAG_machine, TAG_start_state,
70                         TAG_action_list, TAG_action_table_list, TAG_action,
71                         TAG_action_table, TAG_alphtype, TAG_element, TAG_getkey,
72                         TAG_state_actions, TAG_entry_points, TAG_sub_action,
73                         TAG_cond_space_list, TAG_cond_space, TAG_cond_list, TAG_c;
74
75                 # Inline block tokens.
76                 token TAG_text, TAG_goto, TAG_call, TAG_next, TAG_goto_expr,
77                         TAG_call_expr, TAG_next_expr, TAG_ret, TAG_pchar, TAG_char,
78                         TAG_hold, TAG_exec, TAG_holdte, TAG_execte, TAG_curs, TAG_targs,
79                         TAG_entry, TAG_data, TAG_lm_switch, TAG_init_act, TAG_set_act,
80                         TAG_set_tokend, TAG_get_tokend, TAG_init_tokstart,
81                         TAG_set_tokstart, TAG_write, TAG_curstate, TAG_access, TAG_break,
82                         TAG_option;
83
84                 interface;
85         }%%
86
87         Parser( char *fileName )
88                 : fileName(fileName), sourceFileName(0)
89         {
90                 //pd = new ParseData( fileName, sectionName, sectionLoc );
91         }
92
93         int token( int id );
94         int token( int tokenId, Token &token );
95         int token( XMLTag *tag, int col, int line );
96
97         /* Report an error encountered by the parser. */
98         ostream &error();
99         ostream &error( const InputLoc &loc );
100         ostream &parser_error( int tokId, Token &token );
101
102         /* The name of the root section, this does not change during an include. */
103         char *fileName;
104
105         /* Collected during parsing. */
106         char *sourceFileName;
107         char *attrKey;
108         char *attrValue;
109         int curAction;
110         int curActionTable;
111         int curTrans;
112         int curState;
113         int curCondSpace;
114         int curStateCond;
115
116         CodeGenMap codeGenMap;
117 };
118
119 #endif /* _XMLPARSE_H */