fb-doc  0.4.0
FreeBASIC documentation tool
fbdoc_parser.bi
Go to the documentation of this file.
1 
9 
10 #INCLUDE ONCE "fbdoc_emitters.bi"
11 
12 #IF __FB_OUT_DLL__ OR DEFINED(__FB_DOC_PLUGIN__)
13 
14  #DEFINE Code(_T_) P->writeOut(_T_)
15  #PRINT compiling __FB_DOC_PLUGIN__
16 '&/*
17 #ELSE
18  #DEFINE Code(_T_) PRINT #OPT->Ocha, _T_;
19 '&*/
20 #ENDIF
21 
22 
23 '&typedef Parser* Parser_PTR; //!< Doxygen internal (ignore this).
24 
46 TYPE Parser
47 Public:
48 
49 
58  ENUM ParserTokens
59  MSG_STOP = -1
60  MSG_ERROR
61  TOK_EOS
62  TOK_BRCLO
63  TOK_COMMA
64 
65  TOK_KLOPN
66  TOK_KLCLO
67  TOK_DOT
68  TOK_MEOP
69  TOK_3DOT
70  TOK_QUOTE
71  TOK_LATTE
72  TOK_BROPN
73  TOK_EQUAL
74 
75  TOK_ABST
76  TOK_ALIA
77  TOK_AS
78  TOK_BYRE
79  TOK_BYVA
80  TOK_CAST
81  TOK_CDEC
82  TOK_CLAS
83  TOK_COMM
84  TOK_CONS
85  TOK_DECL
86  TOK_DEFI
87  TOK_DIM
88  TOK_END
89  TOK_ENUM
90  TOK_EXDS
91  TOK_EMAC
92  TOK_EXRN
93  TOK_EXPO
94  TOK_INCL
95  TOK_LIB
96  TOK_MACR
97  TOK_WITH
98  TOK_NAMS
99  TOK_ONCE
100  TOK_OVER
101  TOK_PASC
102  TOK_PRIV
103  TOK_PROT
104  TOK_RDIM
105  TOK_PTR
106  TOK_PEEK
107  TOK_PUBL
108  TOK_SCOP
109  TOK_SHAR
110  TOK_PRES
111  TOK_STAT
112  TOK_STCL
113  TOK_TYPE
114  TOK_UNIO
115  TOK_VAR
116  TOK_VIRT
117 
118  TOK_FUNC
119  TOK_FILD
120  TOK_OPER
121  TOK_PROP
122  TOK_SUB
123  TOK_CTOR
124  TOK_DTOR
125 
126  TOK_BYTE
127  TOK_DOUB
128  TOK_INT
129  TOK_LONG
130  TOK_LINT
131  TOK_STRI
132  TOK_SHOR
133  TOK_SING
134  TOK_UBYT
135  TOK_ULNG
136  TOK_ULIN
137  TOK_UINT
138  TOK_USHO
139  TOK_WSTR
140  TOK_ZSTR
141  TOK_ANY
142  TOK_WORD
143 
144  TOK_COMSL
145  TOK_COMML
146  END ENUM
147 
148 
154  AS STRING _
155  InPath = "" _
156  , Fnam _
157  , Buf _
158  , ErrMsg _
159  , Tok _
160  , BlockNam
161 
162 
163 
164 
165 
182  AS LONG PTR _
183  StaTok, _
184  NamTok, _
185  DimTok, _
186  IniTok, _
187  BitTok, _
188  TypTok, _
189  ShaTok, _
190  PtrTok, _
191  Co1Tok, _
192  Co2Tok, _
193  FunTok, _
194  CalTok, _
195  AliTok, _
196  As_Tok, _
197  ParTok, _
198  By_Tok, _
199  DivTok, _
200  Tk1, _
201  EndTok, _
202  UserTok
203 
204 
205 
206 
213  AS LONG _
214  Po, _
215  Fin, _
216  PtrCount, _
217  SrcBgn, _
218  LineNo, _
219  LevelCount, _
220  InTree, _
221  ListCount
222 
223 
224 
225  DECLARE CONSTRUCTOR(BYVAL AS EmitterIF PTR)
226 
227 
237  DECLARE SUB File_(BYREF AS STRING, BYVAL AS INTEGER)
238  DECLARE SUB StdIn()
239  DECLARE SUB Include(BYVAL AS STRING)
240  DECLARE SUB writeOut(BYREF AS STRING)
241 
242 
243 
251  DECLARE PROPERTY CurTok() AS LONG PTR
252  DECLARE PROPERTY BitIni() AS STRING
253  DECLARE PROPERTY SubStr() AS STRING
254  DECLARE PROPERTY SubStr(BYVAL AS LONG PTR) AS STRING
255 
256 
257 
265  DECLARE SUB parseListNam(BYVAL AS EmitFunc)
266  DECLARE SUB parseListNamTyp(BYVAL AS EmitFunc)
267  DECLARE SUB parseListPara(BYVAL AS EmitFunc)
268  DECLARE SUB parseBlockEnum(BYVAL AS EmitFunc)
269  DECLARE SUB parseBlockTyUn(BYVAL AS EmitFunc)
270 
271 
272 Private:
273 
274 
280  ENUM EoS_Modi
281  TO_END_BLOCK
282  TO_END
283  TO_EOL
284  TO_COLON
285  END ENUM
286 
287 
293  AS LONG _
294  ToLast
295 
296  AS LONG PTR _
297  Tk, _
298  A, _
299  L
300 
301  AS EmitterIF PTR Emit
302 
303 
304 
305 
315  DECLARE SUB pre_parse()
316  DECLARE PROPERTY USubStr() AS STRING
317  DECLARE FUNCTION getToken() AS INTEGER
318  DECLARE FUNCTION tokenize(BYVAL AS EoS_Modi) AS INTEGER
319  DECLARE FUNCTION Errr(BYREF AS STRING) AS INTEGER
320 
321  DECLARE FUNCTION demuxNam(BYVAL AS INTEGER = TOK_WORD, BYVAL AS INTEGER = 0) AS INTEGER
322  DECLARE FUNCTION demuxTyp(BYVAL AS INTEGER = 0) AS INTEGER
323  DECLARE FUNCTION demuxDecl() AS INTEGER
324 
325  DECLARE FUNCTION skipOverColon() AS INTEGER
326  DECLARE FUNCTION skipOverBrclo() AS INTEGER
327  DECLARE FUNCTION skipOverComma() AS INTEGER
328 
329  DECLARE FUNCTION VAR_() AS INTEGER
330  DECLARE FUNCTION TYPE_() AS INTEGER
331  DECLARE FUNCTION ENUM_() AS INTEGER
332  DECLARE FUNCTION UNION_() AS INTEGER
333  DECLARE FUNCTION FUNCTION_() AS INTEGER
334  DECLARE FUNCTION DECLARE_() AS INTEGER
335  DECLARE FUNCTION INCLUDE_() AS INTEGER
336  DECLARE FUNCTION DEFINE_() AS INTEGER
337  DECLARE FUNCTION MACRO_() AS INTEGER
338 
339 
340 END TYPE
341 
342 
343 
351 #MACRO SCAN_QUOTE(Buf,Po)
352  VAR esc = IIF(Po, IIF(Buf[Po - 1] = ASC("!"), 1, 0), 0)
353  DO
354  Po += 1
355  SELECT CASE AS CONST Buf[Po]
356  CASE 0, ASC(!"\n") : Po -= 1 : EXIT DO
357  CASE ASC("\") : IF esc THEN Po += 1
358  CASE ASC("""") : IF Buf[Po + 1] = ASC("""") THEN Po += 1 ELSE EXIT DO
359  END SELECT
360  LOOP
361 #ENDMACRO
362 
363 
364 
372 #MACRO SCAN_SL_COMM(Buf,Po)
373  DO
374  Po += 1
375  SELECT CASE AS CONST Buf[Po]
376  CASE 0, ASC(!"\n") : EXIT DO
377  END SELECT
378  LOOP
379 #ENDMACRO
380