1 |
/* |
2 |
BISON Parser to recognise name definition records. |
3 |
A name definiton record ( or def ) has form |
4 |
|
5 |
variable(s) :: decription text |
6 |
|
7 |
It is only recognised when in the comment section of a |
8 |
code. All lines of the form above are treat as def |
9 |
records. All other comment or executable statements are |
10 |
ignored. |
11 |
|
12 |
The parser is fragile and can have problems with unterminated quotes. |
13 |
|
14 |
*/ |
15 |
|
16 |
%union { |
17 |
int LineNo; |
18 |
char *symbolName; |
19 |
} |
20 |
|
21 |
%token <LineNo> OTHER |
22 |
%token <LineNo> NL |
23 |
%token <symbolName> VNAME |
24 |
%token <symbolName> DEF_STRING |
25 |
%token <symbolName> DEF_PUNCT |
26 |
%token <symbolName> DEF_COMMA |
27 |
%token <LineNo> CALL |
28 |
%token <LineNo> NAMELIST |
29 |
%token <LineNo> FSLASH |
30 |
%token <LineNo> CPP_IFDEF |
31 |
%token <LineNo> CPP_IFNDEF |
32 |
%token <LineNo> CPP_DEFINE |
33 |
%token <LineNo> CPP_UNDEF |
34 |
%token <LineNo> CPP_ELIF |
35 |
%token <LineNo> CPP_IF |
36 |
%type <LineNo> call |
37 |
|
38 |
|
39 |
input: |
40 |
| input def |
41 |
| input OTHER |
42 |
; |
43 |
|
44 |
def1: def_v_list '::' descript NL |
45 |
; |
46 |
|
47 |
def2: ',' def_v_list '::' descript NL |
48 |
; |
49 |
|
50 |
def3: '::' descript NL |
51 |
; |
52 |
|
53 |
def4: def4 def2 |
54 |
| def2 |
55 |
; |
56 |
|
57 |
def5: def5 def3 |
58 |
| def3 |
59 |
; |
60 |
|
61 |
def: def1 |
62 |
| def1 def4 |
63 |
| def1 def5 |
64 |
| def1 def4 def5 |
65 |
; |
66 |
|
67 |
descript: descript sentence |
68 |
| sentence |
69 |
; |
70 |
|
71 |
def_v_list: VNAME |
72 |
| def_v_list ',' VNAME |
73 |
|
74 |
sentence: sentence phrase |
75 |
| phrase |
76 |
|
77 |
phrase: DEF_STRING |
78 |
| DEF_STRING def_punct |
79 |
| def_punct |
80 |
| def_punct DEF_STRING |
81 |
|
82 |
def_punct: DEF_COMMA |
83 |
| DEF_PUNCT |