1 %start WholeEnchilada 2 %name-prefix "rc10_" 3 %{ 4 void yyerror(const char* s); 5 int yylex ( void ); 6 7 #ifdef _WIN32 8 # include <windows.h> 9 #endif 10 11 #include <stdio.h> 12 #include <stdlib.h> 13 14 #include "rc1.0_combiners.h" 15 #include "nvparse_errors.h" 16 #include "nvparse_externs.h" 17 18 19 %} 20 %union { 21 int ival; 22 float fval; 23 RegisterEnum registerEnum; 24 BiasScaleEnum biasScaleEnum; 25 MappedRegisterStruct mappedRegisterStruct; 26 ConstColorStruct constColorStruct; 27 GeneralPortionStruct generalPortionStruct; 28 GeneralFunctionStruct generalFunctionStruct; 29 OpStruct opStruct; 30 GeneralCombinerStruct generalCombinerStruct; 31 GeneralCombinersStruct generalCombinersStruct; 32 FinalProductStruct finalProductStruct; 33 FinalRgbFunctionStruct finalRgbFunctionStruct; 34 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 35 FinalCombinerStruct finalCombinerStruct; 36 CombinersStruct combinersStruct; 37 } 38 39 %token <registerEnum> regVariable constVariable color_sum final_product 40 %token <ival> expandString halfBiasString unsignedString unsignedInvertString muxString sumString 41 %token <ival> rgb_portion alpha_portion 42 %token <ival> openParen closeParen openBracket closeBracket semicolon comma 43 %token <ival> dot times minus equals plus 44 %token <biasScaleEnum> bias_by_negative_one_half_scale_by_two bias_by_negative_one_half 45 %token <biasScaleEnum> scale_by_one_half scale_by_two scale_by_four 46 47 %token <ival> clamp_color_sum lerp 48 %token <ival> fragment_rgb fragment_alpha 49 50 %token <fval> floatValue 51 52 %type <combinersStruct> WholeEnchilada Combiners 53 54 %type <constColorStruct> ConstColor 55 %type <generalCombinerStruct> GeneralCombiner 56 %type <generalCombinersStruct> GeneralCombiners 57 %type <ival> PortionDesignator 58 %type <opStruct> Mux Sum Dot Mul 59 %type <generalPortionStruct> GeneralPortion 60 %type <generalFunctionStruct> GeneralFunction 61 %type <biasScaleEnum> BiasScale 62 63 %type <registerEnum> Register 64 %type <mappedRegisterStruct> GeneralMappedRegister FinalMappedRegister 65 %type <finalProductStruct> FinalProduct 66 %type <ival> ClampColorSum 67 %type <finalRgbFunctionStruct> FinalRgbFunction 68 %type <finalAlphaFunctionStruct> FinalAlphaFunction 69 %type <finalCombinerStruct> FinalCombiner 70 71 %% 72 73 WholeEnchilada : Combiners 74 { 75 $1.Validate(); 76 $1.Invoke(); 77 } 78 ; 79 80 Combiners : ConstColor GeneralCombiners FinalCombiner 81 { 82 CombinersStruct combinersStruct; 83 combinersStruct.Init($2, $3, $1); 84 $$ = combinersStruct; 85 } 86 | ConstColor ConstColor GeneralCombiners FinalCombiner 87 { 88 CombinersStruct combinersStruct; 89 combinersStruct.Init($3, $4, $1, $2); 90 $$ = combinersStruct; 91 } 92 | GeneralCombiners FinalCombiner 93 { 94 CombinersStruct combinersStruct; 95 combinersStruct.Init($1, $2); 96 $$ = combinersStruct; 97 } 98 | ConstColor FinalCombiner 99 { 100 GeneralCombinersStruct generalCombinersStruct; 101 generalCombinersStruct.Init(); 102 CombinersStruct combinersStruct; 103 combinersStruct.Init(generalCombinersStruct, $2, $1); 104 $$ = combinersStruct; 105 } 106 | ConstColor ConstColor FinalCombiner 107 { 108 GeneralCombinersStruct generalCombinersStruct; 109 generalCombinersStruct.Init(); 110 CombinersStruct combinersStruct; 111 combinersStruct.Init(generalCombinersStruct, $3, $1, $2); 112 $$ = combinersStruct; 113 } 114 | FinalCombiner 115 { 116 GeneralCombinersStruct generalCombinersStruct; 117 generalCombinersStruct.Init(); 118 CombinersStruct combinersStruct; 119 combinersStruct.Init(generalCombinersStruct, $1); 120 $$ = combinersStruct; 121 } 122 ; 123 124 ConstColor : constVariable equals openParen floatValue comma floatValue comma floatValue comma floatValue closeParen semicolon 125 { 126 ConstColorStruct constColorStruct; 127 constColorStruct.Init($1, $4, $6, $8, $10); 128 $$ = constColorStruct; 129 } 130 ; 131 132 133 GeneralCombiners : GeneralCombiners GeneralCombiner 134 { 135 $1 += $2; 136 $$ = $1; 137 } 138 | GeneralCombiner 139 { 140 GeneralCombinersStruct generalCombinersStruct; 141 generalCombinersStruct.Init($1); 142 $$ = generalCombinersStruct; 143 } 144 ; 145 146 GeneralCombiner : openBracket GeneralPortion GeneralPortion closeBracket 147 { 148 GeneralCombinerStruct generalCombinerStruct; 149 generalCombinerStruct.Init($2, $3); 150 $$ = generalCombinerStruct; 151 } 152 | openBracket ConstColor GeneralPortion GeneralPortion closeBracket 153 { 154 GeneralCombinerStruct generalCombinerStruct; 155 generalCombinerStruct.Init($3, $4, $2); 156 $$ = generalCombinerStruct; 157 } 158 | openBracket ConstColor ConstColor GeneralPortion GeneralPortion closeBracket 159 { 160 GeneralCombinerStruct generalCombinerStruct; 161 generalCombinerStruct.Init($4, $5, $2, $3); 162 $$ = generalCombinerStruct; 163 } 164 | openBracket GeneralPortion closeBracket 165 { 166 GeneralCombinerStruct generalCombinerStruct; 167 generalCombinerStruct.Init($2); 168 $$ = generalCombinerStruct; 169 } 170 | openBracket ConstColor GeneralPortion closeBracket 171 { 172 GeneralCombinerStruct generalCombinerStruct; 173 generalCombinerStruct.Init($3, $2); 174 $$ = generalCombinerStruct; 175 } 176 | openBracket ConstColor ConstColor GeneralPortion closeBracket 177 { 178 GeneralCombinerStruct generalCombinerStruct; 179 generalCombinerStruct.Init($4, $2, $3); 180 $$ = generalCombinerStruct; 181 } 182 ; 183 184 GeneralPortion : PortionDesignator openBracket GeneralFunction BiasScale closeBracket 185 { 186 GeneralPortionStruct generalPortionStruct; 187 generalPortionStruct.Init($1, $3, $4); 188 $$ = generalPortionStruct; 189 } 190 | PortionDesignator openBracket GeneralFunction closeBracket 191 { 192 BiasScaleEnum noScale; 193 noScale.word = RCP_SCALE_BY_ONE; 194 GeneralPortionStruct generalPortionStruct; 195 generalPortionStruct.Init($1, $3, noScale); 196 $$ = generalPortionStruct; 197 } 198 ; 199 200 PortionDesignator : rgb_portion 201 { 202 $$ = $1; 203 } 204 | alpha_portion 205 { 206 $$ = $1; 207 } 208 ; 209 210 GeneralMappedRegister : Register 211 { 212 MappedRegisterStruct reg; 213 reg.Init($1, GL_SIGNED_IDENTITY_NV); 214 $$ = reg; 215 } 216 | minus Register 217 { 218 MappedRegisterStruct reg; 219 reg.Init($2, GL_SIGNED_NEGATE_NV); 220 $$ = reg; 221 } 222 | expandString openParen Register closeParen 223 { 224 MappedRegisterStruct reg; 225 reg.Init($3, GL_EXPAND_NORMAL_NV); 226 $$ = reg; 227 } 228 | minus expandString openParen Register closeParen 229 { 230 MappedRegisterStruct reg; 231 reg.Init($4, GL_EXPAND_NEGATE_NV); 232 $$ = reg; 233 } 234 | halfBiasString openParen Register closeParen 235 { 236 MappedRegisterStruct reg; 237 reg.Init($3, GL_HALF_BIAS_NORMAL_NV); 238 $$ = reg; 239 } 240 | minus halfBiasString openParen Register closeParen 241 { 242 MappedRegisterStruct reg; 243 reg.Init($4, GL_HALF_BIAS_NEGATE_NV); 244 $$ = reg; 245 } 246 | unsignedString openParen Register closeParen 247 { 248 MappedRegisterStruct reg; 249 reg.Init($3, GL_UNSIGNED_IDENTITY_NV); 250 $$ = reg; 251 } 252 | unsignedInvertString openParen Register closeParen 253 { 254 MappedRegisterStruct reg; 255 reg.Init($3, GL_UNSIGNED_INVERT_NV); 256 $$ = reg; 257 } 258 ; 259 260 GeneralFunction : Dot Dot 261 { 262 GeneralFunctionStruct generalFunction; 263 generalFunction.Init($1, $2); 264 $$ = generalFunction; 265 } 266 | Dot Mul 267 { 268 GeneralFunctionStruct generalFunction; 269 generalFunction.Init($1, $2); 270 $$ = generalFunction; 271 } 272 | Mul Dot 273 { 274 GeneralFunctionStruct generalFunction; 275 generalFunction.Init($1, $2); 276 $$ = generalFunction; 277 } 278 | Dot 279 { 280 GeneralFunctionStruct generalFunction; 281 generalFunction.Init($1); 282 $$ = generalFunction; 283 } 284 | Mul Mul 285 { 286 GeneralFunctionStruct generalFunction; 287 generalFunction.Init($1, $2); 288 $$ = generalFunction; 289 } 290 | Mul Mul Mux 291 { 292 GeneralFunctionStruct generalFunction; 293 generalFunction.Init($1, $2, $3); 294 $$ = generalFunction; 295 } 296 | Mul Mul Sum 297 { 298 GeneralFunctionStruct generalFunction; 299 generalFunction.Init($1, $2, $3); 300 $$ = generalFunction; 301 } 302 | Mul 303 { 304 GeneralFunctionStruct generalFunction; 305 generalFunction.Init($1); 306 $$ = generalFunction; 307 } 308 ; 309 310 Dot : Register equals GeneralMappedRegister dot GeneralMappedRegister semicolon 311 { 312 OpStruct dotFunction; 313 dotFunction.Init(RCP_DOT, $1, $3, $5); 314 $$ = dotFunction; 315 } 316 ; 317 318 Mul : Register equals GeneralMappedRegister times GeneralMappedRegister semicolon 319 { 320 OpStruct mulFunction; 321 mulFunction.Init(RCP_MUL, $1, $3, $5); 322 $$ = mulFunction; 323 } 324 | Register equals GeneralMappedRegister semicolon 325 { 326 RegisterEnum zero; 327 zero.word = RCP_ZERO; 328 MappedRegisterStruct one; 329 one.Init(zero, GL_UNSIGNED_INVERT_NV); 330 OpStruct mulFunction; 331 mulFunction.Init(RCP_MUL, $1, $3, one); 332 $$ = mulFunction; 333 } 334 ; 335 336 Mux : Register equals muxString openParen closeParen semicolon 337 { 338 OpStruct muxFunction; 339 muxFunction.Init(RCP_MUX, $1); 340 $$ = muxFunction; 341 } 342 ; 343 344 Sum : Register equals sumString openParen closeParen semicolon 345 { 346 OpStruct sumFunction; 347 sumFunction.Init(RCP_SUM, $1); 348 $$ = sumFunction; 349 } 350 ; 351 352 BiasScale : bias_by_negative_one_half_scale_by_two openParen closeParen semicolon 353 { 354 $$ = $1; 355 } 356 | bias_by_negative_one_half openParen closeParen semicolon 357 { 358 $$ = $1; 359 } 360 | scale_by_one_half openParen closeParen semicolon 361 { 362 $$ = $1; 363 } 364 | scale_by_two openParen closeParen semicolon 365 { 366 $$ = $1; 367 } 368 | scale_by_four openParen closeParen semicolon 369 { 370 $$ = $1; 371 } 372 ; 373 374 FinalMappedRegister : Register 375 { 376 MappedRegisterStruct reg; 377 reg.Init($1, GL_UNSIGNED_IDENTITY_NV); 378 $$ = reg; 379 } 380 | unsignedString openParen Register closeParen 381 { 382 MappedRegisterStruct reg; 383 reg.Init($3, GL_UNSIGNED_IDENTITY_NV); 384 $$ = reg; 385 } 386 | unsignedInvertString openParen Register closeParen 387 { 388 MappedRegisterStruct reg; 389 reg.Init($3, GL_UNSIGNED_INVERT_NV); 390 $$ = reg; 391 } 392 | color_sum 393 { 394 MappedRegisterStruct reg; 395 reg.Init($1); 396 $$ = reg; 397 } 398 | unsignedString openParen color_sum closeParen 399 { 400 MappedRegisterStruct reg; 401 reg.Init($3, GL_UNSIGNED_IDENTITY_NV); 402 $$ = reg; 403 } 404 | unsignedInvertString openParen color_sum closeParen 405 { 406 MappedRegisterStruct reg; 407 reg.Init($3, GL_UNSIGNED_INVERT_NV); 408 $$ = reg; 409 } 410 | final_product 411 { 412 MappedRegisterStruct reg; 413 reg.Init($1); 414 $$ = reg; 415 } 416 | unsignedString openParen final_product closeParen 417 { 418 MappedRegisterStruct reg; 419 reg.Init($3, GL_UNSIGNED_IDENTITY_NV); 420 $$ = reg; 421 } 422 | unsignedInvertString openParen final_product closeParen 423 { 424 MappedRegisterStruct reg; 425 reg.Init($3, GL_UNSIGNED_INVERT_NV); 426 $$ = reg; 427 } 428 ; 429 430 FinalCombiner : FinalAlphaFunction FinalRgbFunction 431 { 432 FinalCombinerStruct finalCombinerStruct; 433 finalCombinerStruct.Init($2, $1, false); 434 $$ = finalCombinerStruct; 435 } 436 | ClampColorSum FinalAlphaFunction FinalRgbFunction 437 { 438 FinalCombinerStruct finalCombinerStruct; 439 finalCombinerStruct.Init($3, $2, true); 440 $$ = finalCombinerStruct; 441 } 442 | FinalProduct FinalAlphaFunction FinalRgbFunction 443 { 444 FinalCombinerStruct finalCombinerStruct; 445 finalCombinerStruct.Init($3, $2, false, $1); 446 $$ = finalCombinerStruct; 447 } 448 | ClampColorSum FinalProduct FinalAlphaFunction FinalRgbFunction 449 { 450 FinalCombinerStruct finalCombinerStruct; 451 finalCombinerStruct.Init($4, $3, true, $2); 452 $$ = finalCombinerStruct; 453 } 454 | FinalProduct ClampColorSum FinalAlphaFunction FinalRgbFunction 455 { 456 FinalCombinerStruct finalCombinerStruct; 457 finalCombinerStruct.Init($4, $3, true, $1); 458 $$ = finalCombinerStruct; 459 } 460 461 | FinalRgbFunction FinalAlphaFunction 462 { 463 FinalCombinerStruct finalCombinerStruct; 464 finalCombinerStruct.Init($1, $2, false); 465 $$ = finalCombinerStruct; 466 } 467 | ClampColorSum FinalRgbFunction FinalAlphaFunction 468 { 469 FinalCombinerStruct finalCombinerStruct; 470 finalCombinerStruct.Init($2, $3, true); 471 $$ = finalCombinerStruct; 472 } 473 | FinalProduct FinalRgbFunction FinalAlphaFunction 474 { 475 FinalCombinerStruct finalCombinerStruct; 476 finalCombinerStruct.Init($2, $3, false, $1); 477 $$ = finalCombinerStruct; 478 } 479 | ClampColorSum FinalProduct FinalRgbFunction FinalAlphaFunction 480 { 481 FinalCombinerStruct finalCombinerStruct; 482 finalCombinerStruct.Init($3, $4, true, $2); 483 $$ = finalCombinerStruct; 484 } 485 | FinalProduct ClampColorSum FinalRgbFunction FinalAlphaFunction 486 { 487 FinalCombinerStruct finalCombinerStruct; 488 finalCombinerStruct.Init($3, $4, true, $1); 489 $$ = finalCombinerStruct; 490 } 491 492 | FinalRgbFunction 493 { 494 FinalCombinerStruct finalCombinerStruct; 495 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 496 finalAlphaFunctionStruct.ZeroOut(); 497 finalCombinerStruct.Init($1, finalAlphaFunctionStruct, false); 498 $$ = finalCombinerStruct; 499 } 500 | ClampColorSum FinalRgbFunction 501 { 502 FinalCombinerStruct finalCombinerStruct; 503 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 504 finalAlphaFunctionStruct.ZeroOut(); 505 finalCombinerStruct.Init($2, finalAlphaFunctionStruct, true); 506 $$ = finalCombinerStruct; 507 } 508 | FinalProduct FinalRgbFunction 509 { 510 FinalCombinerStruct finalCombinerStruct; 511 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 512 finalAlphaFunctionStruct.ZeroOut(); 513 finalCombinerStruct.Init($2, finalAlphaFunctionStruct, false, $1); 514 $$ = finalCombinerStruct; 515 } 516 | ClampColorSum FinalProduct FinalRgbFunction 517 { 518 FinalCombinerStruct finalCombinerStruct; 519 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 520 finalAlphaFunctionStruct.ZeroOut(); 521 finalCombinerStruct.Init($3, finalAlphaFunctionStruct, true, $2); 522 $$ = finalCombinerStruct; 523 } 524 | FinalProduct ClampColorSum FinalRgbFunction 525 { 526 FinalCombinerStruct finalCombinerStruct; 527 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 528 finalAlphaFunctionStruct.ZeroOut(); 529 finalCombinerStruct.Init($3, finalAlphaFunctionStruct, true, $1); 530 $$ = finalCombinerStruct; 531 } 532 533 | FinalAlphaFunction 534 { 535 FinalCombinerStruct finalCombinerStruct; 536 FinalRgbFunctionStruct finalRgbFunctionStruct; 537 finalRgbFunctionStruct.ZeroOut(); 538 finalCombinerStruct.Init(finalRgbFunctionStruct, $1, false); 539 $$ = finalCombinerStruct; 540 } 541 | ClampColorSum FinalAlphaFunction 542 { 543 FinalCombinerStruct finalCombinerStruct; 544 FinalRgbFunctionStruct finalRgbFunctionStruct; 545 finalRgbFunctionStruct.ZeroOut(); 546 finalCombinerStruct.Init(finalRgbFunctionStruct, $2, true); 547 $$ = finalCombinerStruct; 548 } 549 | FinalProduct FinalAlphaFunction 550 { 551 FinalCombinerStruct finalCombinerStruct; 552 FinalRgbFunctionStruct finalRgbFunctionStruct; 553 finalRgbFunctionStruct.ZeroOut(); 554 finalCombinerStruct.Init(finalRgbFunctionStruct, $2, false, $1); 555 $$ = finalCombinerStruct; 556 } 557 | ClampColorSum FinalProduct FinalAlphaFunction 558 { 559 FinalCombinerStruct finalCombinerStruct; 560 FinalRgbFunctionStruct finalRgbFunctionStruct; 561 finalRgbFunctionStruct.ZeroOut(); 562 finalCombinerStruct.Init(finalRgbFunctionStruct, $3, true, $2); 563 $$ = finalCombinerStruct; 564 } 565 | FinalProduct ClampColorSum FinalAlphaFunction 566 { 567 FinalCombinerStruct finalCombinerStruct; 568 FinalRgbFunctionStruct finalRgbFunctionStruct; 569 finalRgbFunctionStruct.ZeroOut(); 570 finalCombinerStruct.Init(finalRgbFunctionStruct, $3, true, $1); 571 $$ = finalCombinerStruct; 572 } 573 ; 574 575 ClampColorSum : clamp_color_sum openParen closeParen semicolon 576 { 577 $$ = $1; 578 } 579 ; 580 581 FinalProduct : final_product equals FinalMappedRegister times FinalMappedRegister semicolon 582 { 583 FinalProductStruct finalProductStruct; 584 finalProductStruct.Init($3, $5); 585 $$ = finalProductStruct; 586 } 587 ; 588 589 FinalRgbFunction : fragment_rgb equals lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen plus FinalMappedRegister semicolon 590 { 591 FinalRgbFunctionStruct finalRgbFunctionStruct; 592 finalRgbFunctionStruct.Init($5, $7, $9, $12); 593 $$ = finalRgbFunctionStruct; 594 } 595 | fragment_rgb equals FinalMappedRegister plus lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen semicolon 596 { 597 FinalRgbFunctionStruct finalRgbFunctionStruct; 598 finalRgbFunctionStruct.Init($7, $9, $11, $3); 599 $$ = finalRgbFunctionStruct; 600 } 601 | fragment_rgb equals lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen semicolon 602 { 603 RegisterEnum zero; 604 zero.word = RCP_ZERO; 605 MappedRegisterStruct reg; 606 reg.Init(zero, GL_UNSIGNED_IDENTITY_NV); 607 FinalRgbFunctionStruct finalRgbFunctionStruct; 608 finalRgbFunctionStruct.Init($5, $7, $9, reg); 609 $$ = finalRgbFunctionStruct; 610 } 611 | fragment_rgb equals FinalMappedRegister times FinalMappedRegister semicolon 612 { 613 RegisterEnum zero; 614 zero.word = RCP_ZERO; 615 MappedRegisterStruct reg1; 616 reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV); 617 MappedRegisterStruct reg2; 618 reg2.Init(zero, GL_UNSIGNED_IDENTITY_NV); 619 FinalRgbFunctionStruct finalRgbFunctionStruct; 620 finalRgbFunctionStruct.Init($3, $5, reg1, reg2); 621 $$ = finalRgbFunctionStruct; 622 } 623 | fragment_rgb equals FinalMappedRegister times FinalMappedRegister plus FinalMappedRegister semicolon 624 { 625 RegisterEnum zero; 626 zero.word = RCP_ZERO; 627 MappedRegisterStruct reg1; 628 reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV); 629 FinalRgbFunctionStruct finalRgbFunctionStruct; 630 finalRgbFunctionStruct.Init($3, $5, reg1, $7); 631 $$ = finalRgbFunctionStruct; 632 } 633 | fragment_rgb equals FinalMappedRegister semicolon 634 { 635 RegisterEnum zero; 636 zero.word = RCP_ZERO; 637 MappedRegisterStruct reg1; 638 reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV); 639 MappedRegisterStruct reg2; 640 reg2.Init(zero, GL_UNSIGNED_IDENTITY_NV); 641 MappedRegisterStruct reg3; 642 reg3.Init(zero, GL_UNSIGNED_IDENTITY_NV); 643 FinalRgbFunctionStruct finalRgbFunctionStruct; 644 finalRgbFunctionStruct.Init(reg1, reg2, reg3, $3); 645 $$ = finalRgbFunctionStruct; 646 } 647 | fragment_rgb equals FinalMappedRegister plus FinalMappedRegister semicolon 648 { 649 RegisterEnum zero; 650 zero.word = RCP_ZERO; 651 MappedRegisterStruct reg2; 652 reg2.Init(zero, GL_UNSIGNED_INVERT_NV); 653 MappedRegisterStruct reg3; 654 reg3.Init(zero, GL_UNSIGNED_IDENTITY_NV); 655 FinalRgbFunctionStruct finalRgbFunctionStruct; 656 finalRgbFunctionStruct.Init($3, reg2, reg3, $5); 657 $$ = finalRgbFunctionStruct; 658 } 659 ; 660 661 FinalAlphaFunction : fragment_alpha equals FinalMappedRegister semicolon 662 { 663 FinalAlphaFunctionStruct finalAlphaFunctionStruct; 664 finalAlphaFunctionStruct.Init($3); 665 $$ = finalAlphaFunctionStruct; 666 } 667 ; 668 669 Register : constVariable 670 { 671 $$ = $1; 672 } 673 | regVariable 674 { 675 $$ = $1; 676 } 677 ; 678 679 %% 680 void yyerror(const char* s) 681 { 682 errors.set("unrecognized token"); 683 } 684