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 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
%{
indexing
description:
"Lace parsers"
author: "Eric Bezault <ericb@gobosoft.com>"
copyright: "Copyright (c) 1999-2001, Eric Bezault and others"
license: "Eiffel Forum Freeware License v1 (see forum.txt)"
date: "$Date: 2001/03/18 12:57:01 $"
revision: "$Revision: 1.4 $"
class ET_LACE_PARSER
inherit
ET_LACE_PARSER_SKELETON
ET_LACE_SCANNER
rename
make as make_lace_scanner
end
creation
make, make_with_factory
%}
%token L_SYSTEM L_ROOT L_END L_CLUSTER
%token L_DEFAULT L_EXTERNAL L_OPTION
%token L_ABSTRACT L_ALL L_EXCLUDE
%token <ET_IDENTIFIER> L_IDENTIFIER L_STRING
%token L_STRERR
%type <ET_CLUSTER> Cluster Nested_cluster Recursive_cluster
%type <ET_CLUSTERS> Cluster_list Clusters_opt Sub_clusters_opt
%type <ET_EXCLUDE> Exclude_opt Exclude_list
%type <ET_IDENTIFIER> Identifier
%start Ace
%%
--------------------------------------------------------------------------------
Ace: L_SYSTEM Identifier L_ROOT Identifier Root_cluster_opt Creation_procedure_opt
Defaults_opt Clusters_opt Externals_opt L_END
{
last_universe := new_universe ($8)
last_universe.set_root_class ($4)
}
;
Root_cluster_opt: -- Empty
| '(' Identifier ')'
;
Creation_procedure_opt: -- Empty
| ':' Identifier
;
Defaults_opt: -- Empty
| L_DEFAULT
| L_DEFAULT Default_list
;
Default_list: Default Default_terminator
| Default Default_separator Default_list
;
Default: Identifier '(' Identifier ')'
;
Default_terminator: -- Empty
| ';'
;
Default_separator: -- Empty
| ';'
;
Clusters_opt: -- Empty
-- { $$ := Void }
| L_CLUSTER
-- { $$ := Void }
| L_CLUSTER Cluster_list
{ $$ := $2 }
;
Cluster_list: Cluster Cluster_terminator
{ $$ := new_clusters ($1) }
| Cluster Cluster_separator Cluster_list
{ $$ := $3; $$.put_first ($1) }
;
Cluster: L_ABSTRACT Nested_cluster
{ $$ := $2; $$.set_abstract (True) }
| L_ALL Recursive_cluster
{ $$ := $2; $$.set_recursive (True) }
| Nested_cluster
{ $$ := $1 }
;
Nested_cluster: Identifier ':' Identifier Options_opt Sub_clusters_opt
{
$$ := new_cluster ($1, $3)
$$.set_subclusters ($5)
}
| Identifier Options_opt Sub_clusters_opt
{
$$ := new_cluster ($1, Void)
$$.set_subclusters ($3)
}
;
Recursive_cluster: Identifier ':' Identifier Exclude_opt Options_opt
{
$$ := new_cluster ($1, $3)
$$.set_exclude ($4)
}
;
Cluster_terminator: -- Empty
| ';'
;
Cluster_separator: -- Empty
| ';'
;
Sub_clusters_opt: -- Empty
-- { $$ := Void }
| L_CLUSTER L_END
-- { $$ := Void }
| L_CLUSTER Cluster_list L_END
{ $$ := $2 }
;
Exclude_opt: -- Empty
| L_EXCLUDE L_END
| L_EXCLUDE Exclude_list L_END
{ $$ := $2 }
| L_EXCLUDE Exclude_list ';' L_END
{ $$ := $2 }
;
Exclude_list: Identifier
{ !! $$.make $$.put_last ($1) }
| Exclude_list ';' Identifier
{ $$ := $1; $$.put_last ($3) }
;
Options_opt: -- Empty
| L_OPTION L_END
| L_OPTION Option_list L_END
;
Option_list: Option Option_terminator
| Option Option_separator Option_list
;
Option: Identifier '(' Identifier ')' ':' Class_list
;
Class_list: Identifier
| Class_list ',' Identifier
;
Option_terminator: -- Empty
| ';'
;
Option_separator: -- Empty
| ';'
;
Externals_opt: -- Empty
| L_EXTERNAL
| L_EXTERNAL External_list
;
External_list: External External_terminator
| External External_separator External_list
;
External: Identifier ':' External_items
;
External_items: Identifier
| External_items ',' Identifier
;
External_terminator: -- Empty
| ';'
;
External_separator: -- Empty
| ';'
;
Identifier: L_IDENTIFIER
{ $$ := $1 }
| L_STRING
{ $$ := $1 }
;
--------------------------------------------------------------------------------
%%
end -- class ET_LACE_PARSER
|