diff options
author | Mike Buland <eichlan@xagasoft.com> | 2006-08-22 05:04:16 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2006-08-22 05:04:16 +0000 |
commit | b78ea37a6f8d289b9adb2b5bc565716168a00060 (patch) | |
tree | a19fd9489e7c7170882c52edae5f532141bec2e8 /src/build.y | |
parent | e95c31f841b67fc69d93ec650fe285d34f996a1e (diff) | |
download | build-b78ea37a6f8d289b9adb2b5bc565716168a00060.tar.gz build-b78ea37a6f8d289b9adb2b5bc565716168a00060.tar.bz2 build-b78ea37a6f8d289b9adb2b5bc565716168a00060.tar.xz build-b78ea37a6f8d289b9adb2b5bc565716168a00060.zip |
The basic outline for all of the initial functions and rules has been set. The
parser and scanner are using the new system so they actually match functions
and whatnot and pass that data to the parser, it's very cool.
Diffstat (limited to '')
-rw-r--r-- | src/build.y | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/build.y b/src/build.y index 5580299..1621dbc 100644 --- a/src/build.y +++ b/src/build.y | |||
@@ -20,9 +20,9 @@ void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ); | |||
20 | } | 20 | } |
21 | 21 | ||
22 | %token <strval> STRING "string literal" | 22 | %token <strval> STRING "string literal" |
23 | %token <strval> REGEXP "regular expression" | ||
24 | %token <tval> TARGETTYPE "target type" | 23 | %token <tval> TARGETTYPE "target type" |
25 | %token <strval> FUNCTION "function name" | 24 | %token <strval> FUNCTION "function name" |
25 | %token <strval> PERFORM "perform name" | ||
26 | 26 | ||
27 | %token TOK_ADDSET "+=" | 27 | %token TOK_ADDSET "+=" |
28 | %token TOK_DEFAULT "default" | 28 | %token TOK_DEFAULT "default" |
@@ -61,12 +61,11 @@ rulecmds: rulecmd | |||
61 | | rulecmds ',' rulecmd | 61 | | rulecmds ',' rulecmd |
62 | ; | 62 | ; |
63 | 63 | ||
64 | rulecmd: TOK_MATCHES REGEXP { printf(" Matches: %s\n", $2 ); } | 64 | rulecmd: TOK_MATCHES { printf(" Matches: " ); } func |
65 | | TOK_PRODUCES STRING { printf(" Produces: %s\n", $2 ); } | 65 | | TOK_PRODUCES STRING { printf(" Produces: %s\n", $2 ); } |
66 | | TOK_REQUIRES { printf(" Requires:\n"); } list {printf("\n");} | 66 | | TOK_REQUIRES { printf(" Requires:\n"); } list {printf("\n");} |
67 | | TOK_INPUT TOK_FILTER REGEXP { printf(" Input Filter: %s\n", $3 ); } | ||
68 | | TOK_INPUT TOK_FILTER { printf(" Input Filter: "); } func {printf("\n");} | 67 | | TOK_INPUT TOK_FILTER { printf(" Input Filter: "); } func {printf("\n");} |
69 | | TOK_PERFORM { printf(" Perform: "); } func {printf("\n");} | 68 | | TOK_PERFORM { printf(" Perform: "); } perf {printf("\n");} |
70 | ; | 69 | ; |
71 | 70 | ||
72 | // Action interpretation | 71 | // Action interpretation |
@@ -78,7 +77,7 @@ actioncmds: actioncmd | |||
78 | | actioncmds ',' actioncmd | 77 | | actioncmds ',' actioncmd |
79 | ; | 78 | ; |
80 | 79 | ||
81 | actioncmd: { printf("\t"); } actioncmdtype list {printf("\n");} | 80 | actioncmd: { printf(" "); } actioncmdtype list {printf("\n");} |
82 | ; | 81 | ; |
83 | 82 | ||
84 | actioncmdtype: TOK_CHECK { printf("check "); } | 83 | actioncmdtype: TOK_CHECK { printf("check "); } |
@@ -97,6 +96,7 @@ targetcmd: TOK_RULE STRING { printf(" Rule %s\n", $2 ); } | |||
97 | | TOK_TARGET TOK_PREFIX STRING { printf(" Target prefix: %s\n", $3 ); } | 96 | | TOK_TARGET TOK_PREFIX STRING { printf(" Target prefix: %s\n", $3 ); } |
98 | | TOK_TARGET TARGETTYPE { printf(" Target Type: %d\n", $2 ); } | 97 | | TOK_TARGET TARGETTYPE { printf(" Target Type: %d\n", $2 ); } |
99 | | TOK_INPUT { printf(" Input: "); } list { printf("\n"); } | 98 | | TOK_INPUT { printf(" Input: "); } list { printf("\n"); } |
99 | | TOK_INPUT TOK_FILTER { printf(" Input filter: "); } func | ||
100 | | TOK_REQUIRES { printf(" Requires: "); } list { printf("\n"); } | 100 | | TOK_REQUIRES { printf(" Requires: "); } list { printf("\n"); } |
101 | | TOK_SET { printf(" Set: "); } targetset | 101 | | TOK_SET { printf(" Set: "); } targetset |
102 | ; | 102 | ; |
@@ -106,26 +106,23 @@ targetset: STRING '=' STRING { printf("%s = %s\n", $1, $3 ); } | |||
106 | ; | 106 | ; |
107 | 107 | ||
108 | // list goo | 108 | // list goo |
109 | |||
110 | list: listitem listfilter | 109 | list: listitem listfilter |
111 | | '[' { printf("["); } listitems ']' { printf("]"); } listfilter | 110 | | '[' { printf("["); } listitems ']' { printf("]"); } listfilter |
112 | ; | 111 | ; |
113 | 112 | ||
114 | listfilter: | 113 | listfilter: |
115 | | TOK_FILTER REGEXP | 114 | | TOK_FILTER { printf(" filtered by "); } func |
116 | | TOK_FILTER func | ||
117 | ; | 115 | ; |
118 | 116 | ||
119 | listitems: listitem | 117 | listitems: listitem |
120 | | listitems ',' {printf(", "); } listitem | 118 | | listitems ',' { printf(", "); } listitem |
121 | ; | 119 | ; |
122 | 120 | ||
123 | listitem: STRING {printf("%s", $1 ); } | 121 | listitem: STRING { printf("%s", $1 ); } |
124 | | func | 122 | | func |
125 | ; | 123 | ; |
126 | 124 | ||
127 | // Function | 125 | // Function |
128 | |||
129 | func: FUNCTION { printf("%s(", $1 ); } '(' funcparams ')' { printf(")"); } | 126 | func: FUNCTION { printf("%s(", $1 ); } '(' funcparams ')' { printf(")"); } |
130 | ; | 127 | ; |
131 | 128 | ||
@@ -134,6 +131,14 @@ funcparams: | |||
134 | | funcparams ',' STRING { printf(", %s", $3 ); } | 131 | | funcparams ',' STRING { printf(", %s", $3 ); } |
135 | ; | 132 | ; |
136 | 133 | ||
134 | // Perform | ||
135 | perf: PERFORM { printf("%s(", $1 ); } '(' perfparams ')' { printf(")"); } | ||
136 | ; | ||
137 | |||
138 | perfparams: | ||
139 | | STRING { printf("%s", $1 ); } | ||
140 | | perfparams ',' STRING { printf(", %s", $3 ); } | ||
141 | ; | ||
137 | %% | 142 | %% |
138 | 143 | ||
139 | void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ) | 144 | void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ) |