diff options
Diffstat (limited to 'src/build.y')
-rw-r--r-- | src/build.y | 108 |
1 files changed, 85 insertions, 23 deletions
diff --git a/src/build.y b/src/build.y index 40f8d34..e9c0083 100644 --- a/src/build.y +++ b/src/build.y | |||
@@ -55,18 +55,37 @@ input: | |||
55 | ; | 55 | ; |
56 | 56 | ||
57 | // Rule interpretation | 57 | // Rule interpretation |
58 | rule: TOK_RULE STRING {printf("Rule %s:\n", $2 ); } ':' rulecmds | 58 | rule: TOK_RULE STRING ':' |
59 | { | ||
60 | bld.addRule( $2 ); | ||
61 | } | ||
62 | rulecmds | ||
59 | ; | 63 | ; |
60 | 64 | ||
61 | rulecmds: rulecmd | 65 | rulecmds: rulecmd |
62 | | rulecmds ',' rulecmd | 66 | | rulecmds ',' rulecmd |
63 | ; | 67 | ; |
64 | 68 | ||
65 | rulecmd: TOK_MATCHES { printf(" Matches: " ); } func { printf("\n"); } | 69 | rulecmd: TOK_MATCHES func |
66 | | TOK_PRODUCES STRING { printf(" Produces: %s\n", $2 ); } | 70 | { |
67 | | TOK_REQUIRES { printf(" Requires:\n"); } list {printf("\n");} | 71 | bld.addRuleMatches(); |
68 | | TOK_INPUT TOK_FILTER { printf(" Input Filter: "); } func {printf("\n");} | 72 | } |
69 | | TOK_PERFORM { printf(" Perform: "); } perf {printf("\n");} | 73 | | TOK_PRODUCES list |
74 | { | ||
75 | bld.addRuleProduces(); | ||
76 | } | ||
77 | | TOK_REQUIRES list | ||
78 | { | ||
79 | bld.addRuleRequires(); | ||
80 | } | ||
81 | | TOK_INPUT TOK_FILTER func | ||
82 | { | ||
83 | bld.addRuleInputFilter(); | ||
84 | } | ||
85 | | TOK_PERFORM perf | ||
86 | { | ||
87 | bld.addRulePerform(); | ||
88 | } | ||
70 | ; | 89 | ; |
71 | 90 | ||
72 | // Action interpretation | 91 | // Action interpretation |
@@ -102,32 +121,62 @@ actioncmd: TOK_CHECK list | |||
102 | ; | 121 | ; |
103 | 122 | ||
104 | // Target interpretation | 123 | // Target interpretation |
105 | target: list ':' { printf(" are targets:\n"); } targetcmds | 124 | target: list ':' |
125 | { | ||
126 | bld.newTarget(); | ||
127 | } | ||
128 | targetcmds | ||
106 | ; | 129 | ; |
107 | 130 | ||
108 | targetcmds: targetcmd | 131 | targetcmds: targetcmd |
109 | | targetcmds ',' targetcmd | 132 | | targetcmds ',' targetcmd |
110 | ; | 133 | ; |
111 | 134 | ||
112 | targetcmd: TOK_RULE STRING { printf(" Rule %s\n", $2 ); } | 135 | targetcmd: TOK_RULE STRING |
113 | | TOK_TARGET TOK_PREFIX STRING { printf(" Target prefix: %s\n", $3 ); } | 136 | { |
114 | | TOK_TARGET TARGETTYPE { printf(" Target Type: %s\n", $2 ); } | 137 | bld.setTargetRule( $2 ); |
115 | | TOK_INPUT { printf(" Input: "); } list { printf("\n"); } | 138 | } |
116 | | TOK_INPUT TOK_FILTER { printf(" Input filter: "); } func { printf("\n"); } | 139 | | TOK_TARGET TOK_PREFIX STRING |
117 | | TOK_REQUIRES { printf(" Requires: "); } list { printf("\n"); } | 140 | { |
118 | | TOK_SET { printf(" Set: "); } targetset | 141 | bld.setTargetPrefix( $3 ); |
142 | } | ||
143 | | TOK_TARGET TARGETTYPE | ||
144 | { | ||
145 | bld.setTargetType( $2 ); | ||
146 | } | ||
147 | | TOK_INPUT list | ||
148 | { | ||
149 | bld.addTargetInput(); | ||
150 | } | ||
151 | | TOK_REQUIRES list | ||
152 | { | ||
153 | bld.addTargetRequires(); | ||
154 | } | ||
155 | | TOK_SET targetset | ||
119 | ; | 156 | ; |
120 | 157 | ||
121 | targetset: STRING '=' STRING { printf("%s = %s\n", $1, $3 ); } | 158 | targetset: STRING '=' STRING |
122 | | STRING TOK_ADDSET STRING { printf("%s += %s\n", $1, $3 ); } | 159 | { |
160 | bld.addTargetSet( $1, $3, setSet ); | ||
161 | } | ||
162 | | STRING TOK_ADDSET STRING | ||
163 | { | ||
164 | bld.addTargetSet( $1, $3, setAdd ); | ||
165 | } | ||
123 | ; | 166 | ; |
124 | 167 | ||
125 | // global set | 168 | // global set |
126 | set: TOK_SET { printf("Set: "); } setwhat | 169 | set: TOK_SET setwhat |
127 | ; | 170 | ; |
128 | 171 | ||
129 | setwhat: STRING '=' STRING { printf("%s = %s\n", $1, $3 ); } | 172 | setwhat: STRING '=' STRING |
130 | | STRING TOK_ADDSET STRING { printf("%s += %s\n", $1, $3 ); } | 173 | { |
174 | bld.addGlobalSet( $1, $3, setSet ); | ||
175 | } | ||
176 | | STRING TOK_ADDSET STRING | ||
177 | { | ||
178 | bld.addGlobalSet( $1, $3, setAdd ); | ||
179 | } | ||
131 | ; | 180 | ; |
132 | 181 | ||
133 | // list goo | 182 | // list goo |
@@ -140,7 +189,10 @@ list: singlelistitem listfilter | |||
140 | ; | 189 | ; |
141 | 190 | ||
142 | listfilter: | 191 | listfilter: |
143 | | TOK_FILTER { printf(" filtered by "); } func | 192 | | TOK_FILTER func |
193 | { | ||
194 | bld.filterList(); | ||
195 | } | ||
144 | ; | 196 | ; |
145 | 197 | ||
146 | listitems: listitem | 198 | listitems: listitem |
@@ -183,12 +235,22 @@ funcparams: | |||
183 | ; | 235 | ; |
184 | 236 | ||
185 | // Perform | 237 | // Perform |
186 | perf: PERFORM { printf("%s(", $1 ); } '(' perfparams ')' { printf(")"); } | 238 | perf: PERFORM |
239 | { | ||
240 | bld.newPerform( $1 ); | ||
241 | } | ||
242 | '(' perfparams ')' | ||
187 | ; | 243 | ; |
188 | 244 | ||
189 | perfparams: | 245 | perfparams: |
190 | | STRING { printf("%s", $1 ); } | 246 | | STRING |
191 | | perfparams ',' STRING { printf(", %s", $3 ); } | 247 | { |
248 | bld.addPerformParam( $1 ); | ||
249 | } | ||
250 | | perfparams ',' STRING | ||
251 | { | ||
252 | bld.addPerformParam( $3 ); | ||
253 | } | ||
192 | ; | 254 | ; |
193 | %% | 255 | %% |
194 | 256 | ||