1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
___________________________________
| | | | | _ | | |
| |___| | | | | _| | | | GNU GLOBAL source code tag system
| | | | | | | | | |
| ~~ | ~~| | ~ | | | ~~| for all hackers.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (c) 2003, 2004 Tama Communications Corporation
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
modifications, as long as this notice is preserved.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
----------------------------------
This directory includes built-in parsers.
1. Required programs.
To build the parser, you need to have the following package installed:
- GNU gperf 3.0.3 to look up reserved words.
- flex 2.5.35 to generate php and assembly parser.
- GNU bison 3.0.4 to generate assembly parser.
2. Reserved word processing using GNU gperf.
This mechanism is independent of lex and bison.
2.1 Outline
(1) Generate gperf(1) source from each reserved word file.
<prefix>_res.in reserved word file
|
[reserved.pl]
|
v
<prefix>_res.gpf gperf source file
(2) Generate include file from gperf source.
<prefix>_res.gpf gperf source file
|
[gperf(1)]
|
v
<prefix>_res.h include file
(3) Include above file from lex source and you can use
<prefix>_reserved_word() function.
Lex source file
+-------------------------------------
|...
|#include "<prefix>_res.h"
|...
|WORD {
| if (<prefix>_reserved_word(yytext, yyleng)) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| ...
+-------------------------------------
2.2 Reserved word file format.
o One word and 'word' which means 'reserved word' a line.
o Null line and the line start with ';' is skipped.
o You need not sort words by alphabetical order.
[Example]
+---------------------
|; This is comment.
|
|int word
|auto word
|...
|foreach word
+---------------------
|