aboutsummaryrefslogtreecommitdiff
path: root/src/build.y
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2006-08-22 05:04:16 +0000
committerMike Buland <eichlan@xagasoft.com>2006-08-22 05:04:16 +0000
commitb78ea37a6f8d289b9adb2b5bc565716168a00060 (patch)
treea19fd9489e7c7170882c52edae5f532141bec2e8 /src/build.y
parente95c31f841b67fc69d93ec650fe285d34f996a1e (diff)
downloadbuild-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.y27
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
64rulecmd: TOK_MATCHES REGEXP { printf(" Matches: %s\n", $2 ); } 64rulecmd: 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
81actioncmd: { printf("\t"); } actioncmdtype list {printf("\n");} 80actioncmd: { printf(" "); } actioncmdtype list {printf("\n");}
82 ; 81 ;
83 82
84actioncmdtype: TOK_CHECK { printf("check "); } 83actioncmdtype: 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
110list: listitem listfilter 109list: listitem listfilter
111 | '[' { printf("["); } listitems ']' { printf("]"); } listfilter 110 | '[' { printf("["); } listitems ']' { printf("]"); } listfilter
112 ; 111 ;
113 112
114listfilter: 113listfilter:
115 | TOK_FILTER REGEXP 114 | TOK_FILTER { printf(" filtered by "); } func
116 | TOK_FILTER func
117 ; 115 ;
118 116
119listitems: listitem 117listitems: listitem
120 | listitems ',' {printf(", "); } listitem 118 | listitems ',' { printf(", "); } listitem
121 ; 119 ;
122 120
123listitem: STRING {printf("%s", $1 ); } 121listitem: STRING { printf("%s", $1 ); }
124 | func 122 | func
125 ; 123 ;
126 124
127// Function 125// Function
128
129func: FUNCTION { printf("%s(", $1 ); } '(' funcparams ')' { printf(")"); } 126func: 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
135perf: PERFORM { printf("%s(", $1 ); } '(' perfparams ')' { printf(")"); }
136 ;
137
138perfparams:
139 | STRING { printf("%s", $1 ); }
140 | perfparams ',' STRING { printf(", %s", $3 ); }
141 ;
137%% 142%%
138 143
139void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ) 144void yyerror( YYLTYPE *locp, Builder &bld, char const *msg )