-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmsta-7.html
192 lines (161 loc) · 5.18 KB
/
msta-7.html
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.66">
<TITLE>MSTA (syntax description translator): Appendix 1 - Syntax of MSTA description file (YACC description)</TITLE>
<LINK HREF="msta-8.html" REL=next>
<LINK HREF="msta-6.html" REL=previous>
<LINK HREF="msta.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="msta-8.html">Next</A>
<A HREF="msta-6.html">Previous</A>
<A HREF="msta.html#toc7">Contents</A>
<HR>
<H2><A NAME="s7">7.</A> <A HREF="msta.html#toc7">Appendix 1 - Syntax of MSTA description file (YACC description)</A></H2>
<P>
<BLOCKQUOTE><CODE>
<PRE>
%token IDENTIFIER_OR_LITERAL /* identifier (including '.')
and literal */
%token C_IDENTIFIER /* identifier followed by a : */
%token NUMBER /* [0-9][0-9]* */
%token STRING /* "..." of C syntax */
%token CODE_INSERTION /* { ... } */
%token YACC_CODE_INSERTION /* %{ ... %} */
%token ADDITIONAL_C_CODE /* code after second %% */
/* Reserved words : %type=>TYPE %left=>LEFT, etc. The attributes of
the following tokens are not defined and not used. */
%token LEFT RIGHT NONASSOC TOKEN PREC LA TYPE START
UNION LOCAL IMPORT EXPORT SCANNER EXPECT
%token PERCENTS /* the %% mark */
%token SEMICOLON /* ; */
%token BAR /* | */
%token SLASH /* / */
%token STAR /* * */
%token PLUS /* + */
%token LESS /* < */
%token GREATER /* > */
%token LEFT_PARENTHESIS /* ) */
%token RIGHT_PARENTHESIS /* ( */
%token LEFT_SQUARE_BRACKET /* [ */
%token RIGHT_SQUARE_BRACKET /* ] */
%token AT /* @ */
%token RANGE /* - */
%token RANGE_NO_LEFT_BOUND /* <- */
%token RANGE_NO_RIGHT_BOUND /* -> */
%token RANGE_NO_LEFT_RIGHT_BOUNDS /* <-> */
/* 8-bit character literals stand for themselves; */
/* tokens have to be defined for multibyte characters */
%start description
%%
description : definitions PERCENTS rules tail
;
tail : /* empty */
| ADDITIONAL_C_CODE
;
definitions : /* empty */
| definitions definition definition_tail
;
definition_tail :
| definition_semicolon_list
;
definition_semicolon_list : SEMICOLON
| definition_semicolon_list SEMICOLON
;
definition : START
IDENTIFIER_OR_LITERAL
| UNION CODE_INSERTION
| YACC_CODE_INSERTION
| LOCAL CODE_INSERTION
| IMPORT CODE_INSERTION
| EXPORT CODE_INSERTION
| SCANNER
| EXPECT NUMBER
| symbol_list_start tag symbol_list
;
symbol_list_start : TOKEN
| LEFT
| RIGHT
| NONASSOC
| TYPE
;
tag : /* empty */
| LESS IDENTIFIER_OR_LITERAL GREATER
;
symbol_list : symbol
| symbol_list symbol
;
symbol : IDENTIFIER_OR_LITERAL
| IDENTIFIER_OR_LITERAL NUMBER
;
/* Rule section */
rules : rule semicolons
| rules rule semicolons
;
rule : C_IDENTIFIER pattern
;
pattern : alternatives
;
alternatives : alternatives BAR alternative
| alternative
;
alternative : sequence prec_la
| sequence prec_la SLASH sequence prec_la
;
sequence : /* empty */
| sequence sequence_element
;
sequence_element : nonamed_sequence_element
| nonamed_sequence_element AT IDENTIFIER_OR_LITERAL
;
nonamed_sequence_element
: LEFT_SQUARE_BRACKET
pattern RIGHT_SQUARE_BRACKET
| unit STAR
| unit PLUS
| CODE_INSERTION code_insertion_tail
| unit
;
code_insertion_tail
:
| code_insertion_semicolon_list
;
code_insertion_semicolon_list
: SEMICOLON
| code_insertion_semicolon_list SEMICOLON
;
unit : LEFT_PARENTHESIS
pattern RIGHT_PARENTHESIS
| IDENTIFIER_OR_LITERAL
| STRING
| IDENTIFIER_OR_LITERAL RANGE IDENTIFIER_OR_LITERAL
| IDENTIFIER_OR_LITERAL RANGE_NO_LEFT_BOUND IDENTIFIER_OR_LITERAL
| IDENTIFIER_OR_LITERAL RANGE_NO_RIGHT_BOUND IDENTIFIER_OR_LITERAL
| IDENTIFIER_OR_LITERAL RANGE_NO_LEFT_RIGHT_BOUNDS
IDENTIFIER_OR_LITERAL
;
prec_la : /* empty */
| PREC IDENTIFIER_OR_LITERAL
| PREC IDENTIFIER_OR_LITERAL CODE_INSERTION code_insertion_tail
| LA NUMBER
| PREC IDENTIFIER_OR_LITERAL LA NUMBER
| LA NUMBER PREC IDENTIFIER_OR_LITERAL
| LA NUMBER CODE_INSERTION code_insertion_tail
| PREC IDENTIFIER_OR_LITERAL LA NUMBER
CODE_INSERTION code_insertion_tail
| LA NUMBER PREC IDENTIFIER_OR_LITERAL
CODE_INSERTION code_insertion_tail
;
semicolons : /* empty */
| semicolons SEMICOLON
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<HR>
<A HREF="msta-8.html">Next</A>
<A HREF="msta-6.html">Previous</A>
<A HREF="msta.html#toc7">Contents</A>
</BODY>
</HTML>