-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsprut-5.html
129 lines (103 loc) · 3.94 KB
/
sprut-5.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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.66">
<TITLE>SPRUT (internal representation description translator): Appendix 1 - Syntax of internal representation description language</TITLE>
<LINK HREF="sprut-4.html" REL=previous>
<LINK HREF="sprut.html#toc5" REL=contents>
</HEAD>
<BODY>
Next
<A HREF="sprut-4.html">Previous</A>
<A HREF="sprut.html#toc5">Contents</A>
<HR>
<H2><A NAME="s5">5.</A> <A HREF="sprut.html#toc5">Appendix 1 - Syntax of internal representation description language</A></H2>
<P>YACC notation is used to describe full syntax of internal
representation description language.
<BLOCKQUOTE><CODE>
<PRE>
%token PERCENTS COMMA COLON DOUBLE_COLON SEMICOLON
IDENTIFIER CODE_INSERTION EXPRESSION ADDITIONAL_C_CODE
%token DOUBLE EXTEND LOCAL IMPORT EXPORT TYPE ROOT ABSTRACT CLASS
SKELETON OTHER
%start description
%%
description : declaration_part PERCENTS node_type_definition_list
ADDITIONAL_C_CODE
;
declaration_part :
| declaration_part DOUBLE any_node_type_name
| declaration_part EXTEND IDENTIFIER
| declaration_part predefined_types_declaration
| declaration_part LOCAL CODE_INSERTION
| declaration_part IMPORT CODE_INSERTION
| declaration_part EXPORT CODE_INSERTION
;
predefined_types_declaration : TYPE
| predefined_types_declaration IDENTIFIER
;
node_type_definition_list : node_type_definition
| node_type_definition_list
SEMICOLON node_type_definition
;
node_type_definition :
| abstract_node_flag type_nodes_identifier_list
optional_immediate_super_type_list
class_field_definition_part
skeleton_field_definition_part
other_field_definition_part
;
abstract_node_flag :
| ABSTRACT
;
type_nodes_identifier_list : identifier_list
;
optional_immediate_super_type_list :
| immediate_super_type_list
;
immediate_super_type_list : DOUBLE_COLON any_node_type_name
| DOUBLE_COLON COMMA any_node_type_name
| immediate_super_type_list COMMA
any_node_type_name
;
any_node_type : ROOT
| IDENTIFIER
;
class_field_definition_part :
| CLASS field_definition_list
;
skeleton_field_definition_part :
| SKELETON field_definition_list
;
other_field_definition_part :
| OTHER field_definition_list
;
field_definition_list :
| field_definition_list field_definition
| field_definition_list constraint
| field_definition_list action
;
field_definition : field_identifier_list COLON optional_double
any_node_type_name
;
optional_double :
| DOUBLE
;
constraint : EXPRESSION
;
action : CODE_INSERTION
;
field_identifier_list : identifier_list
;
identifier_list : IDENTIFIER
| identifier_list COMMA IDENTIFIER
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<HR>
Next
<A HREF="sprut-4.html">Previous</A>
<A HREF="sprut.html#toc5">Contents</A>
</BODY>
</HTML>