1 // A Bison parser, made by GNU Bison 3.7.2. 2 3 // Skeleton interface for Bison LALR(1) parsers in C++ 4 5 // Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. 6 7 // This program is free software: you can redistribute it and/or modify 8 // it under the terms of the GNU General Public License as published by 9 // the Free Software Foundation, either version 3 of the License, or 10 // (at your option) any later version. 11 12 // This program is distributed in the hope that it will be useful, 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 // GNU General Public License for more details. 16 17 // You should have received a copy of the GNU General Public License 18 // along with this program. If not, see <http://www.gnu.org/licenses/>. 19 20 // As a special exception, you may create a larger work that contains 21 // part or all of the Bison parser skeleton and distribute that work 22 // under terms of your choice, so long as that work isn't itself a 23 // parser generator using the skeleton or a modified version thereof 24 // as a parser skeleton. Alternatively, if you modify or redistribute 25 // the parser skeleton itself, you may (at your option) remove this 26 // special exception, which will cause the skeleton and the resulting 27 // Bison output files to be licensed under the GNU General Public 28 // License without this special exception. 29 30 // This special exception was added by the Free Software Foundation in 31 // version 2.2 of Bison. 32 33 34 /** 35 ** \file pico_sdk/tools/pioasm/gen/parser.hpp 36 ** Define the yy::parser class. 37 */ 38 39 // C++ LALR(1) parser skeleton written by Akim Demaille. 40 41 // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, 42 // especially those whose name start with YY_ or yy_. They are 43 // private implementation details that can be changed or removed. 44 45 #ifndef YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED 46 # define YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED 47 // "%code requires" blocks. 48 49 #include <string> 50 #include <fstream> 51 #include <sstream> 52 #include "pio_types.h" 53 struct pio_assembler; 54 55 #ifdef _MSC_VER 56 #pragma warning(disable : 4065) // default only switch statement 57 #endif 58 59 60 61 # include <cstdlib> // std::abort 62 # include <iostream> 63 # include <stdexcept> 64 # include <string> 65 # include <vector> 66 67 #if defined __cplusplus 68 # define YY_CPLUSPLUS __cplusplus 69 #else 70 # define YY_CPLUSPLUS 199711L 71 #endif 72 73 // Support move semantics when possible. 74 #if 201103L <= YY_CPLUSPLUS 75 # define YY_MOVE std::move 76 # define YY_MOVE_OR_COPY move 77 # define YY_MOVE_REF(Type) Type&& 78 # define YY_RVREF(Type) Type&& 79 # define YY_COPY(Type) Type 80 #else 81 # define YY_MOVE 82 # define YY_MOVE_OR_COPY copy 83 # define YY_MOVE_REF(Type) Type& 84 # define YY_RVREF(Type) const Type& 85 # define YY_COPY(Type) const Type& 86 #endif 87 88 // Support noexcept when possible. 89 #if 201103L <= YY_CPLUSPLUS 90 # define YY_NOEXCEPT noexcept 91 # define YY_NOTHROW 92 #else 93 # define YY_NOEXCEPT 94 # define YY_NOTHROW throw () 95 #endif 96 97 // Support constexpr when possible. 98 #if 201703 <= YY_CPLUSPLUS 99 # define YY_CONSTEXPR constexpr 100 #else 101 # define YY_CONSTEXPR 102 #endif 103 # include "location.h" 104 105 #ifndef YY_ASSERT 106 # include <cassert> 107 # define YY_ASSERT assert 108 #endif 109 110 111 #ifndef YY_ATTRIBUTE_PURE 112 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) 113 # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) 114 # else 115 # define YY_ATTRIBUTE_PURE 116 # endif 117 #endif 118 119 #ifndef YY_ATTRIBUTE_UNUSED 120 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) 121 # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 122 # else 123 # define YY_ATTRIBUTE_UNUSED 124 # endif 125 #endif 126 127 /* Suppress unused-variable warnings by "using" E. */ 128 #if ! defined lint || defined __GNUC__ 129 # define YYUSE(E) ((void) (E)) 130 #else 131 # define YYUSE(E) /* empty */ 132 #endif 133 134 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ 135 /* Suppress an incorrect diagnostic about yylval being uninitialized. */ 136 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 137 _Pragma ("GCC diagnostic push") \ 138 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ 139 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 140 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 141 _Pragma ("GCC diagnostic pop") 142 #else 143 # define YY_INITIAL_VALUE(Value) Value 144 #endif 145 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 146 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 147 # define YY_IGNORE_MAYBE_UNINITIALIZED_END 148 #endif 149 #ifndef YY_INITIAL_VALUE 150 # define YY_INITIAL_VALUE(Value) /* Nothing. */ 151 #endif 152 153 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ 154 # define YY_IGNORE_USELESS_CAST_BEGIN \ 155 _Pragma ("GCC diagnostic push") \ 156 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") 157 # define YY_IGNORE_USELESS_CAST_END \ 158 _Pragma ("GCC diagnostic pop") 159 #endif 160 #ifndef YY_IGNORE_USELESS_CAST_BEGIN 161 # define YY_IGNORE_USELESS_CAST_BEGIN 162 # define YY_IGNORE_USELESS_CAST_END 163 #endif 164 165 # ifndef YY_CAST 166 # ifdef __cplusplus 167 # define YY_CAST(Type, Val) static_cast<Type> (Val) 168 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) 169 # else 170 # define YY_CAST(Type, Val) ((Type) (Val)) 171 # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) 172 # endif 173 # endif 174 # ifndef YY_NULLPTR 175 # if defined __cplusplus 176 # if 201103L <= __cplusplus 177 # define YY_NULLPTR nullptr 178 # else 179 # define YY_NULLPTR 0 180 # endif 181 # else 182 # define YY_NULLPTR ((void*)0) 183 # endif 184 # endif 185 186 /* Debug traces. */ 187 #ifndef YYDEBUG 188 # define YYDEBUG 0 189 #endif 190 191 namespace yy { 192 193 194 195 196 /// A Bison parser. 197 class parser 198 { 199 public: 200 #ifndef YYSTYPE 201 /// A buffer to store and retrieve objects. 202 /// 203 /// Sort of a variant, but does not keep track of the nature 204 /// of the stored data, since that knowledge is available 205 /// via the current parser state. 206 class semantic_type 207 { 208 public: 209 /// Type of *this. 210 typedef semantic_type self_type; 211 212 /// Empty construction. semantic_type()213 semantic_type () YY_NOEXCEPT 214 : yybuffer_ () 215 {} 216 217 /// Construct and fill. 218 template <typename T> semantic_type(YY_RVREF (T)t)219 semantic_type (YY_RVREF (T) t) 220 { 221 YY_ASSERT (sizeof (T) <= size); 222 new (yyas_<T> ()) T (YY_MOVE (t)); 223 } 224 225 #if 201103L <= YY_CPLUSPLUS 226 /// Non copyable. 227 semantic_type (const self_type&) = delete; 228 /// Non copyable. 229 self_type& operator= (const self_type&) = delete; 230 #endif 231 232 /// Destruction, allowed only if empty. ~semantic_type()233 ~semantic_type () YY_NOEXCEPT 234 {} 235 236 # if 201103L <= YY_CPLUSPLUS 237 /// Instantiate a \a T in here from \a t. 238 template <typename T, typename... U> 239 T& 240 emplace (U&&... u) 241 { 242 return *new (yyas_<T> ()) T (std::forward <U>(u)...); 243 } 244 # else 245 /// Instantiate an empty \a T in here. 246 template <typename T> 247 T& emplace()248 emplace () 249 { 250 return *new (yyas_<T> ()) T (); 251 } 252 253 /// Instantiate a \a T in here from \a t. 254 template <typename T> 255 T& emplace(const T & t)256 emplace (const T& t) 257 { 258 return *new (yyas_<T> ()) T (t); 259 } 260 # endif 261 262 /// Instantiate an empty \a T in here. 263 /// Obsolete, use emplace. 264 template <typename T> 265 T& build()266 build () 267 { 268 return emplace<T> (); 269 } 270 271 /// Instantiate a \a T in here from \a t. 272 /// Obsolete, use emplace. 273 template <typename T> 274 T& build(const T & t)275 build (const T& t) 276 { 277 return emplace<T> (t); 278 } 279 280 /// Accessor to a built \a T. 281 template <typename T> 282 T& as()283 as () YY_NOEXCEPT 284 { 285 return *yyas_<T> (); 286 } 287 288 /// Const accessor to a built \a T (for %printer). 289 template <typename T> 290 const T& as() const291 as () const YY_NOEXCEPT 292 { 293 return *yyas_<T> (); 294 } 295 296 /// Swap the content with \a that, of same type. 297 /// 298 /// Both variants must be built beforehand, because swapping the actual 299 /// data requires reading it (with as()), and this is not possible on 300 /// unconstructed variants: it would require some dynamic testing, which 301 /// should not be the variant's responsibility. 302 /// Swapping between built and (possibly) non-built is done with 303 /// self_type::move (). 304 template <typename T> 305 void swap(self_type & that)306 swap (self_type& that) YY_NOEXCEPT 307 { 308 std::swap (as<T> (), that.as<T> ()); 309 } 310 311 /// Move the content of \a that to this. 312 /// 313 /// Destroys \a that. 314 template <typename T> 315 void move(self_type & that)316 move (self_type& that) 317 { 318 # if 201103L <= YY_CPLUSPLUS 319 emplace<T> (std::move (that.as<T> ())); 320 # else 321 emplace<T> (); 322 swap<T> (that); 323 # endif 324 that.destroy<T> (); 325 } 326 327 # if 201103L <= YY_CPLUSPLUS 328 /// Move the content of \a that to this. 329 template <typename T> 330 void move(self_type && that)331 move (self_type&& that) 332 { 333 emplace<T> (std::move (that.as<T> ())); 334 that.destroy<T> (); 335 } 336 #endif 337 338 /// Copy the content of \a that to this. 339 template <typename T> 340 void copy(const self_type & that)341 copy (const self_type& that) 342 { 343 emplace<T> (that.as<T> ()); 344 } 345 346 /// Destroy the stored \a T. 347 template <typename T> 348 void destroy()349 destroy () 350 { 351 as<T> ().~T (); 352 } 353 354 private: 355 #if YY_CPLUSPLUS < 201103L 356 /// Non copyable. 357 semantic_type (const self_type&); 358 /// Non copyable. 359 self_type& operator= (const self_type&); 360 #endif 361 362 /// Accessor to raw memory as \a T. 363 template <typename T> 364 T* yyas_()365 yyas_ () YY_NOEXCEPT 366 { 367 void *yyp = yybuffer_.yyraw; 368 return static_cast<T*> (yyp); 369 } 370 371 /// Const accessor to raw memory as \a T. 372 template <typename T> 373 const T* yyas_() const374 yyas_ () const YY_NOEXCEPT 375 { 376 const void *yyp = yybuffer_.yyraw; 377 return static_cast<const T*> (yyp); 378 } 379 380 /// An auxiliary type to compute the largest semantic type. 381 union union_type 382 { 383 // if_full 384 // if_empty 385 // blocking 386 char dummy1[sizeof (bool)]; 387 388 // condition 389 char dummy2[sizeof (enum condition)]; 390 391 // in_source 392 // out_target 393 // set_target 394 char dummy3[sizeof (enum in_out_set)]; 395 396 // irq_modifiers 397 char dummy4[sizeof (enum irq)]; 398 399 // mov_target 400 // mov_source 401 char dummy5[sizeof (enum mov)]; 402 403 // mov_op 404 char dummy6[sizeof (enum mov_op)]; 405 406 // "integer" 407 char dummy7[sizeof (int)]; 408 409 // instruction 410 // base_instruction 411 char dummy8[sizeof (std::shared_ptr<instruction>)]; 412 413 // value 414 // expression 415 // delay 416 // sideset 417 char dummy9[sizeof (std::shared_ptr<resolvable>)]; 418 419 // label_decl 420 // symbol_def 421 char dummy10[sizeof (std::shared_ptr<symbol>)]; 422 423 // wait_source 424 char dummy11[sizeof (std::shared_ptr<wait_source>)]; 425 426 // "identifier" 427 // "string" 428 // "text" 429 // "code block" 430 // "%}" 431 // UNKNOWN_DIRECTIVE 432 char dummy12[sizeof (std::string)]; 433 }; 434 435 /// The size of the largest semantic type. 436 enum { size = sizeof (union_type) }; 437 438 /// A buffer to store semantic values. 439 union 440 { 441 /// Strongest alignment constraints. 442 long double yyalign_me; 443 /// A buffer large enough to store any of the semantic values. 444 char yyraw[size]; 445 } yybuffer_; 446 }; 447 448 #else 449 typedef YYSTYPE semantic_type; 450 #endif 451 /// Symbol locations. 452 typedef location location_type; 453 454 /// Syntax errors thrown from user actions. 455 struct syntax_error : std::runtime_error 456 { syntax_erroryy::parser::syntax_error457 syntax_error (const location_type& l, const std::string& m) 458 : std::runtime_error (m) 459 , location (l) 460 {} 461 syntax_erroryy::parser::syntax_error462 syntax_error (const syntax_error& s) 463 : std::runtime_error (s.what ()) 464 , location (s.location) 465 {} 466 467 ~syntax_error () YY_NOEXCEPT YY_NOTHROW; 468 469 location_type location; 470 }; 471 472 /// Token kinds. 473 struct token 474 { 475 enum token_kind_type 476 { 477 TOK_YYEMPTY = -2, 478 TOK_END = 0, // "end of file" 479 TOK_YYerror = 256, // error 480 TOK_YYUNDEF = 257, // "invalid token" 481 TOK_NEWLINE = 258, // "end of line" 482 TOK_COMMA = 259, // "," 483 TOK_COLON = 260, // ":" 484 TOK_LPAREN = 261, // "(" 485 TOK_RPAREN = 262, // ")" 486 TOK_LBRACKET = 263, // "[" 487 TOK_RBRACKET = 264, // "]" 488 TOK_PLUS = 265, // "+" 489 TOK_MINUS = 266, // "-" 490 TOK_MULTIPLY = 267, // "*" 491 TOK_DIVIDE = 268, // "/" 492 TOK_OR = 269, // "|" 493 TOK_AND = 270, // "&" 494 TOK_XOR = 271, // "^" 495 TOK_POST_DECREMENT = 272, // "--" 496 TOK_NOT_EQUAL = 273, // "!=" 497 TOK_NOT = 274, // "!" 498 TOK_REVERSE = 275, // "::" 499 TOK_EQUAL = 276, // "=" 500 TOK_PROGRAM = 277, // ".program" 501 TOK_WRAP_TARGET = 278, // ".wrap_target" 502 TOK_WRAP = 279, // ".wrap" 503 TOK_DEFINE = 280, // ".define" 504 TOK_SIDE_SET = 281, // ".side_set" 505 TOK_WORD = 282, // ".word" 506 TOK_ORIGIN = 283, // ".origin" 507 TOK_LANG_OPT = 284, // ".lang_opt" 508 TOK_JMP = 285, // "jmp" 509 TOK_WAIT = 286, // "wait" 510 TOK_IN = 287, // "in" 511 TOK_OUT = 288, // "out" 512 TOK_PUSH = 289, // "push" 513 TOK_PULL = 290, // "pull" 514 TOK_MOV = 291, // "mov" 515 TOK_IRQ = 292, // "irq" 516 TOK_SET = 293, // "set" 517 TOK_NOP = 294, // "nop" 518 TOK_PIN = 295, // "pin" 519 TOK_GPIO = 296, // "gpio" 520 TOK_OSRE = 297, // "osre" 521 TOK_PINS = 298, // "pins" 522 TOK_NULL = 299, // "null" 523 TOK_PINDIRS = 300, // "pindirs" 524 TOK_BLOCK = 301, // "block" 525 TOK_NOBLOCK = 302, // "noblock" 526 TOK_IFEMPTY = 303, // "ifempty" 527 TOK_IFFULL = 304, // "iffull" 528 TOK_NOWAIT = 305, // "nowait" 529 TOK_CLEAR = 306, // "clear" 530 TOK_REL = 307, // "rel" 531 TOK_X = 308, // "x" 532 TOK_Y = 309, // "y" 533 TOK_EXEC = 310, // "exec" 534 TOK_PC = 311, // "pc" 535 TOK_ISR = 312, // "isr" 536 TOK_OSR = 313, // "osr" 537 TOK_OPTIONAL = 314, // "opt" 538 TOK_SIDE = 315, // "side" 539 TOK_STATUS = 316, // "status" 540 TOK_PUBLIC = 317, // "public" 541 TOK_ID = 318, // "identifier" 542 TOK_STRING = 319, // "string" 543 TOK_NON_WS = 320, // "text" 544 TOK_CODE_BLOCK_START = 321, // "code block" 545 TOK_CODE_BLOCK_CONTENTS = 322, // "%}" 546 TOK_UNKNOWN_DIRECTIVE = 323, // UNKNOWN_DIRECTIVE 547 TOK_INT = 324 // "integer" 548 }; 549 /// Backward compatibility alias (Bison 3.6). 550 typedef token_kind_type yytokentype; 551 }; 552 553 /// Token kind, as returned by yylex. 554 typedef token::yytokentype token_kind_type; 555 556 /// Backward compatibility alias (Bison 3.6). 557 typedef token_kind_type token_type; 558 559 /// Symbol kinds. 560 struct symbol_kind 561 { 562 enum symbol_kind_type 563 { 564 YYNTOKENS = 70, ///< Number of tokens. 565 S_YYEMPTY = -2, 566 S_YYEOF = 0, // "end of file" 567 S_YYerror = 1, // error 568 S_YYUNDEF = 2, // "invalid token" 569 S_NEWLINE = 3, // "end of line" 570 S_COMMA = 4, // "," 571 S_COLON = 5, // ":" 572 S_LPAREN = 6, // "(" 573 S_RPAREN = 7, // ")" 574 S_LBRACKET = 8, // "[" 575 S_RBRACKET = 9, // "]" 576 S_PLUS = 10, // "+" 577 S_MINUS = 11, // "-" 578 S_MULTIPLY = 12, // "*" 579 S_DIVIDE = 13, // "/" 580 S_OR = 14, // "|" 581 S_AND = 15, // "&" 582 S_XOR = 16, // "^" 583 S_POST_DECREMENT = 17, // "--" 584 S_NOT_EQUAL = 18, // "!=" 585 S_NOT = 19, // "!" 586 S_REVERSE = 20, // "::" 587 S_EQUAL = 21, // "=" 588 S_PROGRAM = 22, // ".program" 589 S_WRAP_TARGET = 23, // ".wrap_target" 590 S_WRAP = 24, // ".wrap" 591 S_DEFINE = 25, // ".define" 592 S_SIDE_SET = 26, // ".side_set" 593 S_WORD = 27, // ".word" 594 S_ORIGIN = 28, // ".origin" 595 S_LANG_OPT = 29, // ".lang_opt" 596 S_JMP = 30, // "jmp" 597 S_WAIT = 31, // "wait" 598 S_IN = 32, // "in" 599 S_OUT = 33, // "out" 600 S_PUSH = 34, // "push" 601 S_PULL = 35, // "pull" 602 S_MOV = 36, // "mov" 603 S_IRQ = 37, // "irq" 604 S_SET = 38, // "set" 605 S_NOP = 39, // "nop" 606 S_PIN = 40, // "pin" 607 S_GPIO = 41, // "gpio" 608 S_OSRE = 42, // "osre" 609 S_PINS = 43, // "pins" 610 S_NULL = 44, // "null" 611 S_PINDIRS = 45, // "pindirs" 612 S_BLOCK = 46, // "block" 613 S_NOBLOCK = 47, // "noblock" 614 S_IFEMPTY = 48, // "ifempty" 615 S_IFFULL = 49, // "iffull" 616 S_NOWAIT = 50, // "nowait" 617 S_CLEAR = 51, // "clear" 618 S_REL = 52, // "rel" 619 S_X = 53, // "x" 620 S_Y = 54, // "y" 621 S_EXEC = 55, // "exec" 622 S_PC = 56, // "pc" 623 S_ISR = 57, // "isr" 624 S_OSR = 58, // "osr" 625 S_OPTIONAL = 59, // "opt" 626 S_SIDE = 60, // "side" 627 S_STATUS = 61, // "status" 628 S_PUBLIC = 62, // "public" 629 S_ID = 63, // "identifier" 630 S_STRING = 64, // "string" 631 S_NON_WS = 65, // "text" 632 S_CODE_BLOCK_START = 66, // "code block" 633 S_CODE_BLOCK_CONTENTS = 67, // "%}" 634 S_UNKNOWN_DIRECTIVE = 68, // UNKNOWN_DIRECTIVE 635 S_INT = 69, // "integer" 636 S_YYACCEPT = 70, // $accept 637 S_file = 71, // file 638 S_lines = 72, // lines 639 S_line = 73, // line 640 S_code_block = 74, // code_block 641 S_label_decl = 75, // label_decl 642 S_directive = 76, // directive 643 S_value = 77, // value 644 S_expression = 78, // expression 645 S_instruction = 79, // instruction 646 S_base_instruction = 80, // base_instruction 647 S_delay = 81, // delay 648 S_sideset = 82, // sideset 649 S_condition = 83, // condition 650 S_wait_source = 84, // wait_source 651 S_comma = 85, // comma 652 S_in_source = 86, // in_source 653 S_out_target = 87, // out_target 654 S_mov_target = 88, // mov_target 655 S_mov_source = 89, // mov_source 656 S_mov_op = 90, // mov_op 657 S_set_target = 91, // set_target 658 S_if_full = 92, // if_full 659 S_if_empty = 93, // if_empty 660 S_blocking = 94, // blocking 661 S_irq_modifiers = 95, // irq_modifiers 662 S_symbol_def = 96 // symbol_def 663 }; 664 }; 665 666 /// (Internal) symbol kind. 667 typedef symbol_kind::symbol_kind_type symbol_kind_type; 668 669 /// The number of tokens. 670 static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; 671 672 /// A complete symbol. 673 /// 674 /// Expects its Base type to provide access to the symbol kind 675 /// via kind (). 676 /// 677 /// Provide access to semantic value and location. 678 template <typename Base> 679 struct basic_symbol : Base 680 { 681 /// Alias to Base. 682 typedef Base super_type; 683 684 /// Default constructor. basic_symbolyy::parser::basic_symbol685 basic_symbol () 686 : value () 687 , location () 688 {} 689 690 #if 201103L <= YY_CPLUSPLUS 691 /// Move constructor. basic_symbolyy::parser::basic_symbol692 basic_symbol (basic_symbol&& that) 693 : Base (std::move (that)) 694 , value () 695 , location (std::move (that.location)) 696 { 697 switch (this->kind ()) 698 { 699 case symbol_kind::S_if_full: // if_full 700 case symbol_kind::S_if_empty: // if_empty 701 case symbol_kind::S_blocking: // blocking 702 value.move< bool > (std::move (that.value)); 703 break; 704 705 case symbol_kind::S_condition: // condition 706 value.move< enum condition > (std::move (that.value)); 707 break; 708 709 case symbol_kind::S_in_source: // in_source 710 case symbol_kind::S_out_target: // out_target 711 case symbol_kind::S_set_target: // set_target 712 value.move< enum in_out_set > (std::move (that.value)); 713 break; 714 715 case symbol_kind::S_irq_modifiers: // irq_modifiers 716 value.move< enum irq > (std::move (that.value)); 717 break; 718 719 case symbol_kind::S_mov_target: // mov_target 720 case symbol_kind::S_mov_source: // mov_source 721 value.move< enum mov > (std::move (that.value)); 722 break; 723 724 case symbol_kind::S_mov_op: // mov_op 725 value.move< enum mov_op > (std::move (that.value)); 726 break; 727 728 case symbol_kind::S_INT: // "integer" 729 value.move< int > (std::move (that.value)); 730 break; 731 732 case symbol_kind::S_instruction: // instruction 733 case symbol_kind::S_base_instruction: // base_instruction 734 value.move< std::shared_ptr<instruction> > (std::move (that.value)); 735 break; 736 737 case symbol_kind::S_value: // value 738 case symbol_kind::S_expression: // expression 739 case symbol_kind::S_delay: // delay 740 case symbol_kind::S_sideset: // sideset 741 value.move< std::shared_ptr<resolvable> > (std::move (that.value)); 742 break; 743 744 case symbol_kind::S_label_decl: // label_decl 745 case symbol_kind::S_symbol_def: // symbol_def 746 value.move< std::shared_ptr<symbol> > (std::move (that.value)); 747 break; 748 749 case symbol_kind::S_wait_source: // wait_source 750 value.move< std::shared_ptr<wait_source> > (std::move (that.value)); 751 break; 752 753 case symbol_kind::S_ID: // "identifier" 754 case symbol_kind::S_STRING: // "string" 755 case symbol_kind::S_NON_WS: // "text" 756 case symbol_kind::S_CODE_BLOCK_START: // "code block" 757 case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" 758 case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE 759 value.move< std::string > (std::move (that.value)); 760 break; 761 762 default: 763 break; 764 } 765 766 } 767 #endif 768 769 /// Copy constructor. 770 basic_symbol (const basic_symbol& that); 771 772 /// Constructor for valueless symbols, and symbols from each type. 773 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol774 basic_symbol (typename Base::kind_type t, location_type&& l) 775 : Base (t) 776 , location (std::move (l)) 777 {} 778 #else basic_symbolyy::parser::basic_symbol779 basic_symbol (typename Base::kind_type t, const location_type& l) 780 : Base (t) 781 , location (l) 782 {} 783 #endif 784 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol785 basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l) 786 : Base (t) 787 , value (std::move (v)) 788 , location (std::move (l)) 789 {} 790 #else basic_symbolyy::parser::basic_symbol791 basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l) 792 : Base (t) 793 , value (v) 794 , location (l) 795 {} 796 #endif 797 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol798 basic_symbol (typename Base::kind_type t, enum condition&& v, location_type&& l) 799 : Base (t) 800 , value (std::move (v)) 801 , location (std::move (l)) 802 {} 803 #else basic_symbolyy::parser::basic_symbol804 basic_symbol (typename Base::kind_type t, const enum condition& v, const location_type& l) 805 : Base (t) 806 , value (v) 807 , location (l) 808 {} 809 #endif 810 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol811 basic_symbol (typename Base::kind_type t, enum in_out_set&& v, location_type&& l) 812 : Base (t) 813 , value (std::move (v)) 814 , location (std::move (l)) 815 {} 816 #else basic_symbolyy::parser::basic_symbol817 basic_symbol (typename Base::kind_type t, const enum in_out_set& v, const location_type& l) 818 : Base (t) 819 , value (v) 820 , location (l) 821 {} 822 #endif 823 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol824 basic_symbol (typename Base::kind_type t, enum irq&& v, location_type&& l) 825 : Base (t) 826 , value (std::move (v)) 827 , location (std::move (l)) 828 {} 829 #else basic_symbolyy::parser::basic_symbol830 basic_symbol (typename Base::kind_type t, const enum irq& v, const location_type& l) 831 : Base (t) 832 , value (v) 833 , location (l) 834 {} 835 #endif 836 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol837 basic_symbol (typename Base::kind_type t, enum mov&& v, location_type&& l) 838 : Base (t) 839 , value (std::move (v)) 840 , location (std::move (l)) 841 {} 842 #else basic_symbolyy::parser::basic_symbol843 basic_symbol (typename Base::kind_type t, const enum mov& v, const location_type& l) 844 : Base (t) 845 , value (v) 846 , location (l) 847 {} 848 #endif 849 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol850 basic_symbol (typename Base::kind_type t, enum mov_op&& v, location_type&& l) 851 : Base (t) 852 , value (std::move (v)) 853 , location (std::move (l)) 854 {} 855 #else basic_symbolyy::parser::basic_symbol856 basic_symbol (typename Base::kind_type t, const enum mov_op& v, const location_type& l) 857 : Base (t) 858 , value (v) 859 , location (l) 860 {} 861 #endif 862 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol863 basic_symbol (typename Base::kind_type t, int&& v, location_type&& l) 864 : Base (t) 865 , value (std::move (v)) 866 , location (std::move (l)) 867 {} 868 #else basic_symbolyy::parser::basic_symbol869 basic_symbol (typename Base::kind_type t, const int& v, const location_type& l) 870 : Base (t) 871 , value (v) 872 , location (l) 873 {} 874 #endif 875 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol876 basic_symbol (typename Base::kind_type t, std::shared_ptr<instruction>&& v, location_type&& l) 877 : Base (t) 878 , value (std::move (v)) 879 , location (std::move (l)) 880 {} 881 #else basic_symbolyy::parser::basic_symbol882 basic_symbol (typename Base::kind_type t, const std::shared_ptr<instruction>& v, const location_type& l) 883 : Base (t) 884 , value (v) 885 , location (l) 886 {} 887 #endif 888 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol889 basic_symbol (typename Base::kind_type t, std::shared_ptr<resolvable>&& v, location_type&& l) 890 : Base (t) 891 , value (std::move (v)) 892 , location (std::move (l)) 893 {} 894 #else basic_symbolyy::parser::basic_symbol895 basic_symbol (typename Base::kind_type t, const std::shared_ptr<resolvable>& v, const location_type& l) 896 : Base (t) 897 , value (v) 898 , location (l) 899 {} 900 #endif 901 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol902 basic_symbol (typename Base::kind_type t, std::shared_ptr<symbol>&& v, location_type&& l) 903 : Base (t) 904 , value (std::move (v)) 905 , location (std::move (l)) 906 {} 907 #else basic_symbolyy::parser::basic_symbol908 basic_symbol (typename Base::kind_type t, const std::shared_ptr<symbol>& v, const location_type& l) 909 : Base (t) 910 , value (v) 911 , location (l) 912 {} 913 #endif 914 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol915 basic_symbol (typename Base::kind_type t, std::shared_ptr<wait_source>&& v, location_type&& l) 916 : Base (t) 917 , value (std::move (v)) 918 , location (std::move (l)) 919 {} 920 #else basic_symbolyy::parser::basic_symbol921 basic_symbol (typename Base::kind_type t, const std::shared_ptr<wait_source>& v, const location_type& l) 922 : Base (t) 923 , value (v) 924 , location (l) 925 {} 926 #endif 927 #if 201103L <= YY_CPLUSPLUS basic_symbolyy::parser::basic_symbol928 basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l) 929 : Base (t) 930 , value (std::move (v)) 931 , location (std::move (l)) 932 {} 933 #else basic_symbolyy::parser::basic_symbol934 basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l) 935 : Base (t) 936 , value (v) 937 , location (l) 938 {} 939 #endif 940 941 /// Destroy the symbol. ~basic_symbolyy::parser::basic_symbol942 ~basic_symbol () 943 { 944 clear (); 945 } 946 947 /// Destroy contents, and record that is empty. clearyy::parser::basic_symbol948 void clear () 949 { 950 // User destructor. 951 symbol_kind_type yykind = this->kind (); 952 basic_symbol<Base>& yysym = *this; 953 (void) yysym; 954 switch (yykind) 955 { 956 default: 957 break; 958 } 959 960 // Value type destructor. 961 switch (yykind) 962 { 963 case symbol_kind::S_if_full: // if_full 964 case symbol_kind::S_if_empty: // if_empty 965 case symbol_kind::S_blocking: // blocking 966 value.template destroy< bool > (); 967 break; 968 969 case symbol_kind::S_condition: // condition 970 value.template destroy< enum condition > (); 971 break; 972 973 case symbol_kind::S_in_source: // in_source 974 case symbol_kind::S_out_target: // out_target 975 case symbol_kind::S_set_target: // set_target 976 value.template destroy< enum in_out_set > (); 977 break; 978 979 case symbol_kind::S_irq_modifiers: // irq_modifiers 980 value.template destroy< enum irq > (); 981 break; 982 983 case symbol_kind::S_mov_target: // mov_target 984 case symbol_kind::S_mov_source: // mov_source 985 value.template destroy< enum mov > (); 986 break; 987 988 case symbol_kind::S_mov_op: // mov_op 989 value.template destroy< enum mov_op > (); 990 break; 991 992 case symbol_kind::S_INT: // "integer" 993 value.template destroy< int > (); 994 break; 995 996 case symbol_kind::S_instruction: // instruction 997 case symbol_kind::S_base_instruction: // base_instruction 998 value.template destroy< std::shared_ptr<instruction> > (); 999 break; 1000 1001 case symbol_kind::S_value: // value 1002 case symbol_kind::S_expression: // expression 1003 case symbol_kind::S_delay: // delay 1004 case symbol_kind::S_sideset: // sideset 1005 value.template destroy< std::shared_ptr<resolvable> > (); 1006 break; 1007 1008 case symbol_kind::S_label_decl: // label_decl 1009 case symbol_kind::S_symbol_def: // symbol_def 1010 value.template destroy< std::shared_ptr<symbol> > (); 1011 break; 1012 1013 case symbol_kind::S_wait_source: // wait_source 1014 value.template destroy< std::shared_ptr<wait_source> > (); 1015 break; 1016 1017 case symbol_kind::S_ID: // "identifier" 1018 case symbol_kind::S_STRING: // "string" 1019 case symbol_kind::S_NON_WS: // "text" 1020 case symbol_kind::S_CODE_BLOCK_START: // "code block" 1021 case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" 1022 case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE 1023 value.template destroy< std::string > (); 1024 break; 1025 1026 default: 1027 break; 1028 } 1029 1030 Base::clear (); 1031 } 1032 1033 /// The user-facing name of this symbol. nameyy::parser::basic_symbol1034 std::string name () const YY_NOEXCEPT 1035 { 1036 return parser::symbol_name (this->kind ()); 1037 } 1038 1039 /// Backward compatibility (Bison 3.6). 1040 symbol_kind_type type_get () const YY_NOEXCEPT; 1041 1042 /// Whether empty. 1043 bool empty () const YY_NOEXCEPT; 1044 1045 /// Destructive move, \a s is emptied into this. 1046 void move (basic_symbol& s); 1047 1048 /// The semantic value. 1049 semantic_type value; 1050 1051 /// The location. 1052 location_type location; 1053 1054 private: 1055 #if YY_CPLUSPLUS < 201103L 1056 /// Assignment operator. 1057 basic_symbol& operator= (const basic_symbol& that); 1058 #endif 1059 }; 1060 1061 /// Type access provider for token (enum) based symbols. 1062 struct by_kind 1063 { 1064 /// Default constructor. 1065 by_kind (); 1066 1067 #if 201103L <= YY_CPLUSPLUS 1068 /// Move constructor. 1069 by_kind (by_kind&& that); 1070 #endif 1071 1072 /// Copy constructor. 1073 by_kind (const by_kind& that); 1074 1075 /// The symbol kind as needed by the constructor. 1076 typedef token_kind_type kind_type; 1077 1078 /// Constructor from (external) token numbers. 1079 by_kind (kind_type t); 1080 1081 /// Record that this symbol is empty. 1082 void clear (); 1083 1084 /// Steal the symbol kind from \a that. 1085 void move (by_kind& that); 1086 1087 /// The (internal) type number (corresponding to \a type). 1088 /// \a empty when empty. 1089 symbol_kind_type kind () const YY_NOEXCEPT; 1090 1091 /// Backward compatibility (Bison 3.6). 1092 symbol_kind_type type_get () const YY_NOEXCEPT; 1093 1094 /// The symbol kind. 1095 /// \a S_YYEMPTY when empty. 1096 symbol_kind_type kind_; 1097 }; 1098 1099 /// Backward compatibility for a private implementation detail (Bison 3.6). 1100 typedef by_kind by_type; 1101 1102 /// "External" symbols: returned by the scanner. 1103 struct symbol_type : basic_symbol<by_kind> 1104 { 1105 /// Superclass. 1106 typedef basic_symbol<by_kind> super_type; 1107 1108 /// Empty symbol. symbol_typeyy::parser::symbol_type1109 symbol_type () {} 1110 1111 /// Constructor for valueless symbols, and symbols from each type. 1112 #if 201103L <= YY_CPLUSPLUS symbol_typeyy::parser::symbol_type1113 symbol_type (int tok, location_type l) 1114 : super_type(token_type (tok), std::move (l)) 1115 { 1116 YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_NEWLINE || tok == token::TOK_COMMA || tok == token::TOK_COLON || tok == token::TOK_LPAREN || tok == token::TOK_RPAREN || tok == token::TOK_LBRACKET || tok == token::TOK_RBRACKET || tok == token::TOK_PLUS || tok == token::TOK_MINUS || tok == token::TOK_MULTIPLY || tok == token::TOK_DIVIDE || tok == token::TOK_OR || tok == token::TOK_AND || tok == token::TOK_XOR || tok == token::TOK_POST_DECREMENT || tok == token::TOK_NOT_EQUAL || tok == token::TOK_NOT || tok == token::TOK_REVERSE || tok == token::TOK_EQUAL || tok == token::TOK_PROGRAM || tok == token::TOK_WRAP_TARGET || tok == token::TOK_WRAP || tok == token::TOK_DEFINE || tok == token::TOK_SIDE_SET || tok == token::TOK_WORD || tok == token::TOK_ORIGIN || tok == token::TOK_LANG_OPT || tok == token::TOK_JMP || tok == token::TOK_WAIT || tok == token::TOK_IN || tok == token::TOK_OUT || tok == token::TOK_PUSH || tok == token::TOK_PULL || tok == token::TOK_MOV || tok == token::TOK_IRQ || tok == token::TOK_SET || tok == token::TOK_NOP || tok == token::TOK_PIN || tok == token::TOK_GPIO || tok == token::TOK_OSRE || tok == token::TOK_PINS || tok == token::TOK_NULL || tok == token::TOK_PINDIRS || tok == token::TOK_BLOCK || tok == token::TOK_NOBLOCK || tok == token::TOK_IFEMPTY || tok == token::TOK_IFFULL || tok == token::TOK_NOWAIT || tok == token::TOK_CLEAR || tok == token::TOK_REL || tok == token::TOK_X || tok == token::TOK_Y || tok == token::TOK_EXEC || tok == token::TOK_PC || tok == token::TOK_ISR || tok == token::TOK_OSR || tok == token::TOK_OPTIONAL || tok == token::TOK_SIDE || tok == token::TOK_STATUS || tok == token::TOK_PUBLIC); 1117 } 1118 #else symbol_typeyy::parser::symbol_type1119 symbol_type (int tok, const location_type& l) 1120 : super_type(token_type (tok), l) 1121 { 1122 YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_NEWLINE || tok == token::TOK_COMMA || tok == token::TOK_COLON || tok == token::TOK_LPAREN || tok == token::TOK_RPAREN || tok == token::TOK_LBRACKET || tok == token::TOK_RBRACKET || tok == token::TOK_PLUS || tok == token::TOK_MINUS || tok == token::TOK_MULTIPLY || tok == token::TOK_DIVIDE || tok == token::TOK_OR || tok == token::TOK_AND || tok == token::TOK_XOR || tok == token::TOK_POST_DECREMENT || tok == token::TOK_NOT_EQUAL || tok == token::TOK_NOT || tok == token::TOK_REVERSE || tok == token::TOK_EQUAL || tok == token::TOK_PROGRAM || tok == token::TOK_WRAP_TARGET || tok == token::TOK_WRAP || tok == token::TOK_DEFINE || tok == token::TOK_SIDE_SET || tok == token::TOK_WORD || tok == token::TOK_ORIGIN || tok == token::TOK_LANG_OPT || tok == token::TOK_JMP || tok == token::TOK_WAIT || tok == token::TOK_IN || tok == token::TOK_OUT || tok == token::TOK_PUSH || tok == token::TOK_PULL || tok == token::TOK_MOV || tok == token::TOK_IRQ || tok == token::TOK_SET || tok == token::TOK_NOP || tok == token::TOK_PIN || tok == token::TOK_GPIO || tok == token::TOK_OSRE || tok == token::TOK_PINS || tok == token::TOK_NULL || tok == token::TOK_PINDIRS || tok == token::TOK_BLOCK || tok == token::TOK_NOBLOCK || tok == token::TOK_IFEMPTY || tok == token::TOK_IFFULL || tok == token::TOK_NOWAIT || tok == token::TOK_CLEAR || tok == token::TOK_REL || tok == token::TOK_X || tok == token::TOK_Y || tok == token::TOK_EXEC || tok == token::TOK_PC || tok == token::TOK_ISR || tok == token::TOK_OSR || tok == token::TOK_OPTIONAL || tok == token::TOK_SIDE || tok == token::TOK_STATUS || tok == token::TOK_PUBLIC); 1123 } 1124 #endif 1125 #if 201103L <= YY_CPLUSPLUS symbol_typeyy::parser::symbol_type1126 symbol_type (int tok, int v, location_type l) 1127 : super_type(token_type (tok), std::move (v), std::move (l)) 1128 { 1129 YY_ASSERT (tok == token::TOK_INT); 1130 } 1131 #else symbol_typeyy::parser::symbol_type1132 symbol_type (int tok, const int& v, const location_type& l) 1133 : super_type(token_type (tok), v, l) 1134 { 1135 YY_ASSERT (tok == token::TOK_INT); 1136 } 1137 #endif 1138 #if 201103L <= YY_CPLUSPLUS symbol_typeyy::parser::symbol_type1139 symbol_type (int tok, std::string v, location_type l) 1140 : super_type(token_type (tok), std::move (v), std::move (l)) 1141 { 1142 YY_ASSERT (tok == token::TOK_ID || tok == token::TOK_STRING || tok == token::TOK_NON_WS || tok == token::TOK_CODE_BLOCK_START || tok == token::TOK_CODE_BLOCK_CONTENTS || tok == token::TOK_UNKNOWN_DIRECTIVE); 1143 } 1144 #else symbol_typeyy::parser::symbol_type1145 symbol_type (int tok, const std::string& v, const location_type& l) 1146 : super_type(token_type (tok), v, l) 1147 { 1148 YY_ASSERT (tok == token::TOK_ID || tok == token::TOK_STRING || tok == token::TOK_NON_WS || tok == token::TOK_CODE_BLOCK_START || tok == token::TOK_CODE_BLOCK_CONTENTS || tok == token::TOK_UNKNOWN_DIRECTIVE); 1149 } 1150 #endif 1151 }; 1152 1153 /// Build a parser object. 1154 parser (pio_assembler& pioasm_yyarg); 1155 virtual ~parser (); 1156 1157 #if 201103L <= YY_CPLUSPLUS 1158 /// Non copyable. 1159 parser (const parser&) = delete; 1160 /// Non copyable. 1161 parser& operator= (const parser&) = delete; 1162 #endif 1163 1164 /// Parse. An alias for parse (). 1165 /// \returns 0 iff parsing succeeded. 1166 int operator() (); 1167 1168 /// Parse. 1169 /// \returns 0 iff parsing succeeded. 1170 virtual int parse (); 1171 1172 #if YYDEBUG 1173 /// The current debugging stream. 1174 std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; 1175 /// Set the current debugging stream. 1176 void set_debug_stream (std::ostream &); 1177 1178 /// Type for debugging levels. 1179 typedef int debug_level_type; 1180 /// The current debugging level. 1181 debug_level_type debug_level () const YY_ATTRIBUTE_PURE; 1182 /// Set the current debugging level. 1183 void set_debug_level (debug_level_type l); 1184 #endif 1185 1186 /// Report a syntax error. 1187 /// \param loc where the syntax error is found. 1188 /// \param msg a description of the syntax error. 1189 virtual void error (const location_type& loc, const std::string& msg); 1190 1191 /// Report a syntax error. 1192 void error (const syntax_error& err); 1193 1194 /// The user-facing name of the symbol whose (internal) number is 1195 /// YYSYMBOL. No bounds checking. 1196 static std::string symbol_name (symbol_kind_type yysymbol); 1197 1198 // Implementation of make_symbol for each symbol type. 1199 #if 201103L <= YY_CPLUSPLUS 1200 static 1201 symbol_type make_END(location_type l)1202 make_END (location_type l) 1203 { 1204 return symbol_type (token::TOK_END, std::move (l)); 1205 } 1206 #else 1207 static 1208 symbol_type make_END(const location_type & l)1209 make_END (const location_type& l) 1210 { 1211 return symbol_type (token::TOK_END, l); 1212 } 1213 #endif 1214 #if 201103L <= YY_CPLUSPLUS 1215 static 1216 symbol_type make_YYerror(location_type l)1217 make_YYerror (location_type l) 1218 { 1219 return symbol_type (token::TOK_YYerror, std::move (l)); 1220 } 1221 #else 1222 static 1223 symbol_type make_YYerror(const location_type & l)1224 make_YYerror (const location_type& l) 1225 { 1226 return symbol_type (token::TOK_YYerror, l); 1227 } 1228 #endif 1229 #if 201103L <= YY_CPLUSPLUS 1230 static 1231 symbol_type make_YYUNDEF(location_type l)1232 make_YYUNDEF (location_type l) 1233 { 1234 return symbol_type (token::TOK_YYUNDEF, std::move (l)); 1235 } 1236 #else 1237 static 1238 symbol_type make_YYUNDEF(const location_type & l)1239 make_YYUNDEF (const location_type& l) 1240 { 1241 return symbol_type (token::TOK_YYUNDEF, l); 1242 } 1243 #endif 1244 #if 201103L <= YY_CPLUSPLUS 1245 static 1246 symbol_type make_NEWLINE(location_type l)1247 make_NEWLINE (location_type l) 1248 { 1249 return symbol_type (token::TOK_NEWLINE, std::move (l)); 1250 } 1251 #else 1252 static 1253 symbol_type make_NEWLINE(const location_type & l)1254 make_NEWLINE (const location_type& l) 1255 { 1256 return symbol_type (token::TOK_NEWLINE, l); 1257 } 1258 #endif 1259 #if 201103L <= YY_CPLUSPLUS 1260 static 1261 symbol_type make_COMMA(location_type l)1262 make_COMMA (location_type l) 1263 { 1264 return symbol_type (token::TOK_COMMA, std::move (l)); 1265 } 1266 #else 1267 static 1268 symbol_type make_COMMA(const location_type & l)1269 make_COMMA (const location_type& l) 1270 { 1271 return symbol_type (token::TOK_COMMA, l); 1272 } 1273 #endif 1274 #if 201103L <= YY_CPLUSPLUS 1275 static 1276 symbol_type make_COLON(location_type l)1277 make_COLON (location_type l) 1278 { 1279 return symbol_type (token::TOK_COLON, std::move (l)); 1280 } 1281 #else 1282 static 1283 symbol_type make_COLON(const location_type & l)1284 make_COLON (const location_type& l) 1285 { 1286 return symbol_type (token::TOK_COLON, l); 1287 } 1288 #endif 1289 #if 201103L <= YY_CPLUSPLUS 1290 static 1291 symbol_type make_LPAREN(location_type l)1292 make_LPAREN (location_type l) 1293 { 1294 return symbol_type (token::TOK_LPAREN, std::move (l)); 1295 } 1296 #else 1297 static 1298 symbol_type make_LPAREN(const location_type & l)1299 make_LPAREN (const location_type& l) 1300 { 1301 return symbol_type (token::TOK_LPAREN, l); 1302 } 1303 #endif 1304 #if 201103L <= YY_CPLUSPLUS 1305 static 1306 symbol_type make_RPAREN(location_type l)1307 make_RPAREN (location_type l) 1308 { 1309 return symbol_type (token::TOK_RPAREN, std::move (l)); 1310 } 1311 #else 1312 static 1313 symbol_type make_RPAREN(const location_type & l)1314 make_RPAREN (const location_type& l) 1315 { 1316 return symbol_type (token::TOK_RPAREN, l); 1317 } 1318 #endif 1319 #if 201103L <= YY_CPLUSPLUS 1320 static 1321 symbol_type make_LBRACKET(location_type l)1322 make_LBRACKET (location_type l) 1323 { 1324 return symbol_type (token::TOK_LBRACKET, std::move (l)); 1325 } 1326 #else 1327 static 1328 symbol_type make_LBRACKET(const location_type & l)1329 make_LBRACKET (const location_type& l) 1330 { 1331 return symbol_type (token::TOK_LBRACKET, l); 1332 } 1333 #endif 1334 #if 201103L <= YY_CPLUSPLUS 1335 static 1336 symbol_type make_RBRACKET(location_type l)1337 make_RBRACKET (location_type l) 1338 { 1339 return symbol_type (token::TOK_RBRACKET, std::move (l)); 1340 } 1341 #else 1342 static 1343 symbol_type make_RBRACKET(const location_type & l)1344 make_RBRACKET (const location_type& l) 1345 { 1346 return symbol_type (token::TOK_RBRACKET, l); 1347 } 1348 #endif 1349 #if 201103L <= YY_CPLUSPLUS 1350 static 1351 symbol_type make_PLUS(location_type l)1352 make_PLUS (location_type l) 1353 { 1354 return symbol_type (token::TOK_PLUS, std::move (l)); 1355 } 1356 #else 1357 static 1358 symbol_type make_PLUS(const location_type & l)1359 make_PLUS (const location_type& l) 1360 { 1361 return symbol_type (token::TOK_PLUS, l); 1362 } 1363 #endif 1364 #if 201103L <= YY_CPLUSPLUS 1365 static 1366 symbol_type make_MINUS(location_type l)1367 make_MINUS (location_type l) 1368 { 1369 return symbol_type (token::TOK_MINUS, std::move (l)); 1370 } 1371 #else 1372 static 1373 symbol_type make_MINUS(const location_type & l)1374 make_MINUS (const location_type& l) 1375 { 1376 return symbol_type (token::TOK_MINUS, l); 1377 } 1378 #endif 1379 #if 201103L <= YY_CPLUSPLUS 1380 static 1381 symbol_type make_MULTIPLY(location_type l)1382 make_MULTIPLY (location_type l) 1383 { 1384 return symbol_type (token::TOK_MULTIPLY, std::move (l)); 1385 } 1386 #else 1387 static 1388 symbol_type make_MULTIPLY(const location_type & l)1389 make_MULTIPLY (const location_type& l) 1390 { 1391 return symbol_type (token::TOK_MULTIPLY, l); 1392 } 1393 #endif 1394 #if 201103L <= YY_CPLUSPLUS 1395 static 1396 symbol_type make_DIVIDE(location_type l)1397 make_DIVIDE (location_type l) 1398 { 1399 return symbol_type (token::TOK_DIVIDE, std::move (l)); 1400 } 1401 #else 1402 static 1403 symbol_type make_DIVIDE(const location_type & l)1404 make_DIVIDE (const location_type& l) 1405 { 1406 return symbol_type (token::TOK_DIVIDE, l); 1407 } 1408 #endif 1409 #if 201103L <= YY_CPLUSPLUS 1410 static 1411 symbol_type make_OR(location_type l)1412 make_OR (location_type l) 1413 { 1414 return symbol_type (token::TOK_OR, std::move (l)); 1415 } 1416 #else 1417 static 1418 symbol_type make_OR(const location_type & l)1419 make_OR (const location_type& l) 1420 { 1421 return symbol_type (token::TOK_OR, l); 1422 } 1423 #endif 1424 #if 201103L <= YY_CPLUSPLUS 1425 static 1426 symbol_type make_AND(location_type l)1427 make_AND (location_type l) 1428 { 1429 return symbol_type (token::TOK_AND, std::move (l)); 1430 } 1431 #else 1432 static 1433 symbol_type make_AND(const location_type & l)1434 make_AND (const location_type& l) 1435 { 1436 return symbol_type (token::TOK_AND, l); 1437 } 1438 #endif 1439 #if 201103L <= YY_CPLUSPLUS 1440 static 1441 symbol_type make_XOR(location_type l)1442 make_XOR (location_type l) 1443 { 1444 return symbol_type (token::TOK_XOR, std::move (l)); 1445 } 1446 #else 1447 static 1448 symbol_type make_XOR(const location_type & l)1449 make_XOR (const location_type& l) 1450 { 1451 return symbol_type (token::TOK_XOR, l); 1452 } 1453 #endif 1454 #if 201103L <= YY_CPLUSPLUS 1455 static 1456 symbol_type make_POST_DECREMENT(location_type l)1457 make_POST_DECREMENT (location_type l) 1458 { 1459 return symbol_type (token::TOK_POST_DECREMENT, std::move (l)); 1460 } 1461 #else 1462 static 1463 symbol_type make_POST_DECREMENT(const location_type & l)1464 make_POST_DECREMENT (const location_type& l) 1465 { 1466 return symbol_type (token::TOK_POST_DECREMENT, l); 1467 } 1468 #endif 1469 #if 201103L <= YY_CPLUSPLUS 1470 static 1471 symbol_type make_NOT_EQUAL(location_type l)1472 make_NOT_EQUAL (location_type l) 1473 { 1474 return symbol_type (token::TOK_NOT_EQUAL, std::move (l)); 1475 } 1476 #else 1477 static 1478 symbol_type make_NOT_EQUAL(const location_type & l)1479 make_NOT_EQUAL (const location_type& l) 1480 { 1481 return symbol_type (token::TOK_NOT_EQUAL, l); 1482 } 1483 #endif 1484 #if 201103L <= YY_CPLUSPLUS 1485 static 1486 symbol_type make_NOT(location_type l)1487 make_NOT (location_type l) 1488 { 1489 return symbol_type (token::TOK_NOT, std::move (l)); 1490 } 1491 #else 1492 static 1493 symbol_type make_NOT(const location_type & l)1494 make_NOT (const location_type& l) 1495 { 1496 return symbol_type (token::TOK_NOT, l); 1497 } 1498 #endif 1499 #if 201103L <= YY_CPLUSPLUS 1500 static 1501 symbol_type make_REVERSE(location_type l)1502 make_REVERSE (location_type l) 1503 { 1504 return symbol_type (token::TOK_REVERSE, std::move (l)); 1505 } 1506 #else 1507 static 1508 symbol_type make_REVERSE(const location_type & l)1509 make_REVERSE (const location_type& l) 1510 { 1511 return symbol_type (token::TOK_REVERSE, l); 1512 } 1513 #endif 1514 #if 201103L <= YY_CPLUSPLUS 1515 static 1516 symbol_type make_EQUAL(location_type l)1517 make_EQUAL (location_type l) 1518 { 1519 return symbol_type (token::TOK_EQUAL, std::move (l)); 1520 } 1521 #else 1522 static 1523 symbol_type make_EQUAL(const location_type & l)1524 make_EQUAL (const location_type& l) 1525 { 1526 return symbol_type (token::TOK_EQUAL, l); 1527 } 1528 #endif 1529 #if 201103L <= YY_CPLUSPLUS 1530 static 1531 symbol_type make_PROGRAM(location_type l)1532 make_PROGRAM (location_type l) 1533 { 1534 return symbol_type (token::TOK_PROGRAM, std::move (l)); 1535 } 1536 #else 1537 static 1538 symbol_type make_PROGRAM(const location_type & l)1539 make_PROGRAM (const location_type& l) 1540 { 1541 return symbol_type (token::TOK_PROGRAM, l); 1542 } 1543 #endif 1544 #if 201103L <= YY_CPLUSPLUS 1545 static 1546 symbol_type make_WRAP_TARGET(location_type l)1547 make_WRAP_TARGET (location_type l) 1548 { 1549 return symbol_type (token::TOK_WRAP_TARGET, std::move (l)); 1550 } 1551 #else 1552 static 1553 symbol_type make_WRAP_TARGET(const location_type & l)1554 make_WRAP_TARGET (const location_type& l) 1555 { 1556 return symbol_type (token::TOK_WRAP_TARGET, l); 1557 } 1558 #endif 1559 #if 201103L <= YY_CPLUSPLUS 1560 static 1561 symbol_type make_WRAP(location_type l)1562 make_WRAP (location_type l) 1563 { 1564 return symbol_type (token::TOK_WRAP, std::move (l)); 1565 } 1566 #else 1567 static 1568 symbol_type make_WRAP(const location_type & l)1569 make_WRAP (const location_type& l) 1570 { 1571 return symbol_type (token::TOK_WRAP, l); 1572 } 1573 #endif 1574 #if 201103L <= YY_CPLUSPLUS 1575 static 1576 symbol_type make_DEFINE(location_type l)1577 make_DEFINE (location_type l) 1578 { 1579 return symbol_type (token::TOK_DEFINE, std::move (l)); 1580 } 1581 #else 1582 static 1583 symbol_type make_DEFINE(const location_type & l)1584 make_DEFINE (const location_type& l) 1585 { 1586 return symbol_type (token::TOK_DEFINE, l); 1587 } 1588 #endif 1589 #if 201103L <= YY_CPLUSPLUS 1590 static 1591 symbol_type make_SIDE_SET(location_type l)1592 make_SIDE_SET (location_type l) 1593 { 1594 return symbol_type (token::TOK_SIDE_SET, std::move (l)); 1595 } 1596 #else 1597 static 1598 symbol_type make_SIDE_SET(const location_type & l)1599 make_SIDE_SET (const location_type& l) 1600 { 1601 return symbol_type (token::TOK_SIDE_SET, l); 1602 } 1603 #endif 1604 #if 201103L <= YY_CPLUSPLUS 1605 static 1606 symbol_type make_WORD(location_type l)1607 make_WORD (location_type l) 1608 { 1609 return symbol_type (token::TOK_WORD, std::move (l)); 1610 } 1611 #else 1612 static 1613 symbol_type make_WORD(const location_type & l)1614 make_WORD (const location_type& l) 1615 { 1616 return symbol_type (token::TOK_WORD, l); 1617 } 1618 #endif 1619 #if 201103L <= YY_CPLUSPLUS 1620 static 1621 symbol_type make_ORIGIN(location_type l)1622 make_ORIGIN (location_type l) 1623 { 1624 return symbol_type (token::TOK_ORIGIN, std::move (l)); 1625 } 1626 #else 1627 static 1628 symbol_type make_ORIGIN(const location_type & l)1629 make_ORIGIN (const location_type& l) 1630 { 1631 return symbol_type (token::TOK_ORIGIN, l); 1632 } 1633 #endif 1634 #if 201103L <= YY_CPLUSPLUS 1635 static 1636 symbol_type make_LANG_OPT(location_type l)1637 make_LANG_OPT (location_type l) 1638 { 1639 return symbol_type (token::TOK_LANG_OPT, std::move (l)); 1640 } 1641 #else 1642 static 1643 symbol_type make_LANG_OPT(const location_type & l)1644 make_LANG_OPT (const location_type& l) 1645 { 1646 return symbol_type (token::TOK_LANG_OPT, l); 1647 } 1648 #endif 1649 #if 201103L <= YY_CPLUSPLUS 1650 static 1651 symbol_type make_JMP(location_type l)1652 make_JMP (location_type l) 1653 { 1654 return symbol_type (token::TOK_JMP, std::move (l)); 1655 } 1656 #else 1657 static 1658 symbol_type make_JMP(const location_type & l)1659 make_JMP (const location_type& l) 1660 { 1661 return symbol_type (token::TOK_JMP, l); 1662 } 1663 #endif 1664 #if 201103L <= YY_CPLUSPLUS 1665 static 1666 symbol_type make_WAIT(location_type l)1667 make_WAIT (location_type l) 1668 { 1669 return symbol_type (token::TOK_WAIT, std::move (l)); 1670 } 1671 #else 1672 static 1673 symbol_type make_WAIT(const location_type & l)1674 make_WAIT (const location_type& l) 1675 { 1676 return symbol_type (token::TOK_WAIT, l); 1677 } 1678 #endif 1679 #if 201103L <= YY_CPLUSPLUS 1680 static 1681 symbol_type make_IN(location_type l)1682 make_IN (location_type l) 1683 { 1684 return symbol_type (token::TOK_IN, std::move (l)); 1685 } 1686 #else 1687 static 1688 symbol_type make_IN(const location_type & l)1689 make_IN (const location_type& l) 1690 { 1691 return symbol_type (token::TOK_IN, l); 1692 } 1693 #endif 1694 #if 201103L <= YY_CPLUSPLUS 1695 static 1696 symbol_type make_OUT(location_type l)1697 make_OUT (location_type l) 1698 { 1699 return symbol_type (token::TOK_OUT, std::move (l)); 1700 } 1701 #else 1702 static 1703 symbol_type make_OUT(const location_type & l)1704 make_OUT (const location_type& l) 1705 { 1706 return symbol_type (token::TOK_OUT, l); 1707 } 1708 #endif 1709 #if 201103L <= YY_CPLUSPLUS 1710 static 1711 symbol_type make_PUSH(location_type l)1712 make_PUSH (location_type l) 1713 { 1714 return symbol_type (token::TOK_PUSH, std::move (l)); 1715 } 1716 #else 1717 static 1718 symbol_type make_PUSH(const location_type & l)1719 make_PUSH (const location_type& l) 1720 { 1721 return symbol_type (token::TOK_PUSH, l); 1722 } 1723 #endif 1724 #if 201103L <= YY_CPLUSPLUS 1725 static 1726 symbol_type make_PULL(location_type l)1727 make_PULL (location_type l) 1728 { 1729 return symbol_type (token::TOK_PULL, std::move (l)); 1730 } 1731 #else 1732 static 1733 symbol_type make_PULL(const location_type & l)1734 make_PULL (const location_type& l) 1735 { 1736 return symbol_type (token::TOK_PULL, l); 1737 } 1738 #endif 1739 #if 201103L <= YY_CPLUSPLUS 1740 static 1741 symbol_type make_MOV(location_type l)1742 make_MOV (location_type l) 1743 { 1744 return symbol_type (token::TOK_MOV, std::move (l)); 1745 } 1746 #else 1747 static 1748 symbol_type make_MOV(const location_type & l)1749 make_MOV (const location_type& l) 1750 { 1751 return symbol_type (token::TOK_MOV, l); 1752 } 1753 #endif 1754 #if 201103L <= YY_CPLUSPLUS 1755 static 1756 symbol_type make_IRQ(location_type l)1757 make_IRQ (location_type l) 1758 { 1759 return symbol_type (token::TOK_IRQ, std::move (l)); 1760 } 1761 #else 1762 static 1763 symbol_type make_IRQ(const location_type & l)1764 make_IRQ (const location_type& l) 1765 { 1766 return symbol_type (token::TOK_IRQ, l); 1767 } 1768 #endif 1769 #if 201103L <= YY_CPLUSPLUS 1770 static 1771 symbol_type make_SET(location_type l)1772 make_SET (location_type l) 1773 { 1774 return symbol_type (token::TOK_SET, std::move (l)); 1775 } 1776 #else 1777 static 1778 symbol_type make_SET(const location_type & l)1779 make_SET (const location_type& l) 1780 { 1781 return symbol_type (token::TOK_SET, l); 1782 } 1783 #endif 1784 #if 201103L <= YY_CPLUSPLUS 1785 static 1786 symbol_type make_NOP(location_type l)1787 make_NOP (location_type l) 1788 { 1789 return symbol_type (token::TOK_NOP, std::move (l)); 1790 } 1791 #else 1792 static 1793 symbol_type make_NOP(const location_type & l)1794 make_NOP (const location_type& l) 1795 { 1796 return symbol_type (token::TOK_NOP, l); 1797 } 1798 #endif 1799 #if 201103L <= YY_CPLUSPLUS 1800 static 1801 symbol_type make_PIN(location_type l)1802 make_PIN (location_type l) 1803 { 1804 return symbol_type (token::TOK_PIN, std::move (l)); 1805 } 1806 #else 1807 static 1808 symbol_type make_PIN(const location_type & l)1809 make_PIN (const location_type& l) 1810 { 1811 return symbol_type (token::TOK_PIN, l); 1812 } 1813 #endif 1814 #if 201103L <= YY_CPLUSPLUS 1815 static 1816 symbol_type make_GPIO(location_type l)1817 make_GPIO (location_type l) 1818 { 1819 return symbol_type (token::TOK_GPIO, std::move (l)); 1820 } 1821 #else 1822 static 1823 symbol_type make_GPIO(const location_type & l)1824 make_GPIO (const location_type& l) 1825 { 1826 return symbol_type (token::TOK_GPIO, l); 1827 } 1828 #endif 1829 #if 201103L <= YY_CPLUSPLUS 1830 static 1831 symbol_type make_OSRE(location_type l)1832 make_OSRE (location_type l) 1833 { 1834 return symbol_type (token::TOK_OSRE, std::move (l)); 1835 } 1836 #else 1837 static 1838 symbol_type make_OSRE(const location_type & l)1839 make_OSRE (const location_type& l) 1840 { 1841 return symbol_type (token::TOK_OSRE, l); 1842 } 1843 #endif 1844 #if 201103L <= YY_CPLUSPLUS 1845 static 1846 symbol_type make_PINS(location_type l)1847 make_PINS (location_type l) 1848 { 1849 return symbol_type (token::TOK_PINS, std::move (l)); 1850 } 1851 #else 1852 static 1853 symbol_type make_PINS(const location_type & l)1854 make_PINS (const location_type& l) 1855 { 1856 return symbol_type (token::TOK_PINS, l); 1857 } 1858 #endif 1859 #if 201103L <= YY_CPLUSPLUS 1860 static 1861 symbol_type make_NULL(location_type l)1862 make_NULL (location_type l) 1863 { 1864 return symbol_type (token::TOK_NULL, std::move (l)); 1865 } 1866 #else 1867 static 1868 symbol_type make_NULL(const location_type & l)1869 make_NULL (const location_type& l) 1870 { 1871 return symbol_type (token::TOK_NULL, l); 1872 } 1873 #endif 1874 #if 201103L <= YY_CPLUSPLUS 1875 static 1876 symbol_type make_PINDIRS(location_type l)1877 make_PINDIRS (location_type l) 1878 { 1879 return symbol_type (token::TOK_PINDIRS, std::move (l)); 1880 } 1881 #else 1882 static 1883 symbol_type make_PINDIRS(const location_type & l)1884 make_PINDIRS (const location_type& l) 1885 { 1886 return symbol_type (token::TOK_PINDIRS, l); 1887 } 1888 #endif 1889 #if 201103L <= YY_CPLUSPLUS 1890 static 1891 symbol_type make_BLOCK(location_type l)1892 make_BLOCK (location_type l) 1893 { 1894 return symbol_type (token::TOK_BLOCK, std::move (l)); 1895 } 1896 #else 1897 static 1898 symbol_type make_BLOCK(const location_type & l)1899 make_BLOCK (const location_type& l) 1900 { 1901 return symbol_type (token::TOK_BLOCK, l); 1902 } 1903 #endif 1904 #if 201103L <= YY_CPLUSPLUS 1905 static 1906 symbol_type make_NOBLOCK(location_type l)1907 make_NOBLOCK (location_type l) 1908 { 1909 return symbol_type (token::TOK_NOBLOCK, std::move (l)); 1910 } 1911 #else 1912 static 1913 symbol_type make_NOBLOCK(const location_type & l)1914 make_NOBLOCK (const location_type& l) 1915 { 1916 return symbol_type (token::TOK_NOBLOCK, l); 1917 } 1918 #endif 1919 #if 201103L <= YY_CPLUSPLUS 1920 static 1921 symbol_type make_IFEMPTY(location_type l)1922 make_IFEMPTY (location_type l) 1923 { 1924 return symbol_type (token::TOK_IFEMPTY, std::move (l)); 1925 } 1926 #else 1927 static 1928 symbol_type make_IFEMPTY(const location_type & l)1929 make_IFEMPTY (const location_type& l) 1930 { 1931 return symbol_type (token::TOK_IFEMPTY, l); 1932 } 1933 #endif 1934 #if 201103L <= YY_CPLUSPLUS 1935 static 1936 symbol_type make_IFFULL(location_type l)1937 make_IFFULL (location_type l) 1938 { 1939 return symbol_type (token::TOK_IFFULL, std::move (l)); 1940 } 1941 #else 1942 static 1943 symbol_type make_IFFULL(const location_type & l)1944 make_IFFULL (const location_type& l) 1945 { 1946 return symbol_type (token::TOK_IFFULL, l); 1947 } 1948 #endif 1949 #if 201103L <= YY_CPLUSPLUS 1950 static 1951 symbol_type make_NOWAIT(location_type l)1952 make_NOWAIT (location_type l) 1953 { 1954 return symbol_type (token::TOK_NOWAIT, std::move (l)); 1955 } 1956 #else 1957 static 1958 symbol_type make_NOWAIT(const location_type & l)1959 make_NOWAIT (const location_type& l) 1960 { 1961 return symbol_type (token::TOK_NOWAIT, l); 1962 } 1963 #endif 1964 #if 201103L <= YY_CPLUSPLUS 1965 static 1966 symbol_type make_CLEAR(location_type l)1967 make_CLEAR (location_type l) 1968 { 1969 return symbol_type (token::TOK_CLEAR, std::move (l)); 1970 } 1971 #else 1972 static 1973 symbol_type make_CLEAR(const location_type & l)1974 make_CLEAR (const location_type& l) 1975 { 1976 return symbol_type (token::TOK_CLEAR, l); 1977 } 1978 #endif 1979 #if 201103L <= YY_CPLUSPLUS 1980 static 1981 symbol_type make_REL(location_type l)1982 make_REL (location_type l) 1983 { 1984 return symbol_type (token::TOK_REL, std::move (l)); 1985 } 1986 #else 1987 static 1988 symbol_type make_REL(const location_type & l)1989 make_REL (const location_type& l) 1990 { 1991 return symbol_type (token::TOK_REL, l); 1992 } 1993 #endif 1994 #if 201103L <= YY_CPLUSPLUS 1995 static 1996 symbol_type make_X(location_type l)1997 make_X (location_type l) 1998 { 1999 return symbol_type (token::TOK_X, std::move (l)); 2000 } 2001 #else 2002 static 2003 symbol_type make_X(const location_type & l)2004 make_X (const location_type& l) 2005 { 2006 return symbol_type (token::TOK_X, l); 2007 } 2008 #endif 2009 #if 201103L <= YY_CPLUSPLUS 2010 static 2011 symbol_type make_Y(location_type l)2012 make_Y (location_type l) 2013 { 2014 return symbol_type (token::TOK_Y, std::move (l)); 2015 } 2016 #else 2017 static 2018 symbol_type make_Y(const location_type & l)2019 make_Y (const location_type& l) 2020 { 2021 return symbol_type (token::TOK_Y, l); 2022 } 2023 #endif 2024 #if 201103L <= YY_CPLUSPLUS 2025 static 2026 symbol_type make_EXEC(location_type l)2027 make_EXEC (location_type l) 2028 { 2029 return symbol_type (token::TOK_EXEC, std::move (l)); 2030 } 2031 #else 2032 static 2033 symbol_type make_EXEC(const location_type & l)2034 make_EXEC (const location_type& l) 2035 { 2036 return symbol_type (token::TOK_EXEC, l); 2037 } 2038 #endif 2039 #if 201103L <= YY_CPLUSPLUS 2040 static 2041 symbol_type make_PC(location_type l)2042 make_PC (location_type l) 2043 { 2044 return symbol_type (token::TOK_PC, std::move (l)); 2045 } 2046 #else 2047 static 2048 symbol_type make_PC(const location_type & l)2049 make_PC (const location_type& l) 2050 { 2051 return symbol_type (token::TOK_PC, l); 2052 } 2053 #endif 2054 #if 201103L <= YY_CPLUSPLUS 2055 static 2056 symbol_type make_ISR(location_type l)2057 make_ISR (location_type l) 2058 { 2059 return symbol_type (token::TOK_ISR, std::move (l)); 2060 } 2061 #else 2062 static 2063 symbol_type make_ISR(const location_type & l)2064 make_ISR (const location_type& l) 2065 { 2066 return symbol_type (token::TOK_ISR, l); 2067 } 2068 #endif 2069 #if 201103L <= YY_CPLUSPLUS 2070 static 2071 symbol_type make_OSR(location_type l)2072 make_OSR (location_type l) 2073 { 2074 return symbol_type (token::TOK_OSR, std::move (l)); 2075 } 2076 #else 2077 static 2078 symbol_type make_OSR(const location_type & l)2079 make_OSR (const location_type& l) 2080 { 2081 return symbol_type (token::TOK_OSR, l); 2082 } 2083 #endif 2084 #if 201103L <= YY_CPLUSPLUS 2085 static 2086 symbol_type make_OPTIONAL(location_type l)2087 make_OPTIONAL (location_type l) 2088 { 2089 return symbol_type (token::TOK_OPTIONAL, std::move (l)); 2090 } 2091 #else 2092 static 2093 symbol_type make_OPTIONAL(const location_type & l)2094 make_OPTIONAL (const location_type& l) 2095 { 2096 return symbol_type (token::TOK_OPTIONAL, l); 2097 } 2098 #endif 2099 #if 201103L <= YY_CPLUSPLUS 2100 static 2101 symbol_type make_SIDE(location_type l)2102 make_SIDE (location_type l) 2103 { 2104 return symbol_type (token::TOK_SIDE, std::move (l)); 2105 } 2106 #else 2107 static 2108 symbol_type make_SIDE(const location_type & l)2109 make_SIDE (const location_type& l) 2110 { 2111 return symbol_type (token::TOK_SIDE, l); 2112 } 2113 #endif 2114 #if 201103L <= YY_CPLUSPLUS 2115 static 2116 symbol_type make_STATUS(location_type l)2117 make_STATUS (location_type l) 2118 { 2119 return symbol_type (token::TOK_STATUS, std::move (l)); 2120 } 2121 #else 2122 static 2123 symbol_type make_STATUS(const location_type & l)2124 make_STATUS (const location_type& l) 2125 { 2126 return symbol_type (token::TOK_STATUS, l); 2127 } 2128 #endif 2129 #if 201103L <= YY_CPLUSPLUS 2130 static 2131 symbol_type make_PUBLIC(location_type l)2132 make_PUBLIC (location_type l) 2133 { 2134 return symbol_type (token::TOK_PUBLIC, std::move (l)); 2135 } 2136 #else 2137 static 2138 symbol_type make_PUBLIC(const location_type & l)2139 make_PUBLIC (const location_type& l) 2140 { 2141 return symbol_type (token::TOK_PUBLIC, l); 2142 } 2143 #endif 2144 #if 201103L <= YY_CPLUSPLUS 2145 static 2146 symbol_type make_ID(std::string v,location_type l)2147 make_ID (std::string v, location_type l) 2148 { 2149 return symbol_type (token::TOK_ID, std::move (v), std::move (l)); 2150 } 2151 #else 2152 static 2153 symbol_type make_ID(const std::string & v,const location_type & l)2154 make_ID (const std::string& v, const location_type& l) 2155 { 2156 return symbol_type (token::TOK_ID, v, l); 2157 } 2158 #endif 2159 #if 201103L <= YY_CPLUSPLUS 2160 static 2161 symbol_type make_STRING(std::string v,location_type l)2162 make_STRING (std::string v, location_type l) 2163 { 2164 return symbol_type (token::TOK_STRING, std::move (v), std::move (l)); 2165 } 2166 #else 2167 static 2168 symbol_type make_STRING(const std::string & v,const location_type & l)2169 make_STRING (const std::string& v, const location_type& l) 2170 { 2171 return symbol_type (token::TOK_STRING, v, l); 2172 } 2173 #endif 2174 #if 201103L <= YY_CPLUSPLUS 2175 static 2176 symbol_type make_NON_WS(std::string v,location_type l)2177 make_NON_WS (std::string v, location_type l) 2178 { 2179 return symbol_type (token::TOK_NON_WS, std::move (v), std::move (l)); 2180 } 2181 #else 2182 static 2183 symbol_type make_NON_WS(const std::string & v,const location_type & l)2184 make_NON_WS (const std::string& v, const location_type& l) 2185 { 2186 return symbol_type (token::TOK_NON_WS, v, l); 2187 } 2188 #endif 2189 #if 201103L <= YY_CPLUSPLUS 2190 static 2191 symbol_type make_CODE_BLOCK_START(std::string v,location_type l)2192 make_CODE_BLOCK_START (std::string v, location_type l) 2193 { 2194 return symbol_type (token::TOK_CODE_BLOCK_START, std::move (v), std::move (l)); 2195 } 2196 #else 2197 static 2198 symbol_type make_CODE_BLOCK_START(const std::string & v,const location_type & l)2199 make_CODE_BLOCK_START (const std::string& v, const location_type& l) 2200 { 2201 return symbol_type (token::TOK_CODE_BLOCK_START, v, l); 2202 } 2203 #endif 2204 #if 201103L <= YY_CPLUSPLUS 2205 static 2206 symbol_type make_CODE_BLOCK_CONTENTS(std::string v,location_type l)2207 make_CODE_BLOCK_CONTENTS (std::string v, location_type l) 2208 { 2209 return symbol_type (token::TOK_CODE_BLOCK_CONTENTS, std::move (v), std::move (l)); 2210 } 2211 #else 2212 static 2213 symbol_type make_CODE_BLOCK_CONTENTS(const std::string & v,const location_type & l)2214 make_CODE_BLOCK_CONTENTS (const std::string& v, const location_type& l) 2215 { 2216 return symbol_type (token::TOK_CODE_BLOCK_CONTENTS, v, l); 2217 } 2218 #endif 2219 #if 201103L <= YY_CPLUSPLUS 2220 static 2221 symbol_type make_UNKNOWN_DIRECTIVE(std::string v,location_type l)2222 make_UNKNOWN_DIRECTIVE (std::string v, location_type l) 2223 { 2224 return symbol_type (token::TOK_UNKNOWN_DIRECTIVE, std::move (v), std::move (l)); 2225 } 2226 #else 2227 static 2228 symbol_type make_UNKNOWN_DIRECTIVE(const std::string & v,const location_type & l)2229 make_UNKNOWN_DIRECTIVE (const std::string& v, const location_type& l) 2230 { 2231 return symbol_type (token::TOK_UNKNOWN_DIRECTIVE, v, l); 2232 } 2233 #endif 2234 #if 201103L <= YY_CPLUSPLUS 2235 static 2236 symbol_type make_INT(int v,location_type l)2237 make_INT (int v, location_type l) 2238 { 2239 return symbol_type (token::TOK_INT, std::move (v), std::move (l)); 2240 } 2241 #else 2242 static 2243 symbol_type make_INT(const int & v,const location_type & l)2244 make_INT (const int& v, const location_type& l) 2245 { 2246 return symbol_type (token::TOK_INT, v, l); 2247 } 2248 #endif 2249 2250 2251 class context 2252 { 2253 public: 2254 context (const parser& yyparser, const symbol_type& yyla); lookahead() const2255 const symbol_type& lookahead () const { return yyla_; } token() const2256 symbol_kind_type token () const { return yyla_.kind (); } location() const2257 const location_type& location () const { return yyla_.location; } 2258 2259 /// Put in YYARG at most YYARGN of the expected tokens, and return the 2260 /// number of tokens stored in YYARG. If YYARG is null, return the 2261 /// number of expected tokens (guaranteed to be less than YYNTOKENS). 2262 int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; 2263 2264 private: 2265 const parser& yyparser_; 2266 const symbol_type& yyla_; 2267 }; 2268 2269 private: 2270 #if YY_CPLUSPLUS < 201103L 2271 /// Non copyable. 2272 parser (const parser&); 2273 /// Non copyable. 2274 parser& operator= (const parser&); 2275 #endif 2276 2277 /// Check the lookahead yytoken. 2278 /// \returns true iff the token will be eventually shifted. 2279 bool yy_lac_check_ (symbol_kind_type yytoken) const; 2280 /// Establish the initial context if no initial context currently exists. 2281 /// \returns true iff the token will be eventually shifted. 2282 bool yy_lac_establish_ (symbol_kind_type yytoken); 2283 /// Discard any previous initial lookahead context because of event. 2284 /// \param event the event which caused the lookahead to be discarded. 2285 /// Only used for debbuging output. 2286 void yy_lac_discard_ (const char* event); 2287 2288 /// Stored state numbers (used for stacks). 2289 typedef unsigned char state_type; 2290 2291 /// The arguments of the error message. 2292 int yy_syntax_error_arguments_ (const context& yyctx, 2293 symbol_kind_type yyarg[], int yyargn) const; 2294 2295 /// Generate an error message. 2296 /// \param yyctx the context in which the error occurred. 2297 virtual std::string yysyntax_error_ (const context& yyctx) const; 2298 /// Compute post-reduction state. 2299 /// \param yystate the current state 2300 /// \param yysym the nonterminal to push on the stack 2301 static state_type yy_lr_goto_state_ (state_type yystate, int yysym); 2302 2303 /// Whether the given \c yypact_ value indicates a defaulted state. 2304 /// \param yyvalue the value to check 2305 static bool yy_pact_value_is_default_ (int yyvalue); 2306 2307 /// Whether the given \c yytable_ value indicates a syntax error. 2308 /// \param yyvalue the value to check 2309 static bool yy_table_value_is_error_ (int yyvalue); 2310 2311 static const signed char yypact_ninf_; 2312 static const signed char yytable_ninf_; 2313 2314 /// Convert a scanner token kind \a t to a symbol kind. 2315 /// In theory \a t should be a token_kind_type, but character literals 2316 /// are valid, yet not members of the token_type enum. 2317 static symbol_kind_type yytranslate_ (int t); 2318 2319 /// Convert the symbol name \a n to a form suitable for a diagnostic. 2320 static std::string yytnamerr_ (const char *yystr); 2321 2322 /// For a symbol, its name in clear. 2323 static const char* const yytname_[]; 2324 2325 2326 // Tables. 2327 // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 2328 // STATE-NUM. 2329 static const short yypact_[]; 2330 2331 // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. 2332 // Performed when YYTABLE does not specify something else to do. Zero 2333 // means the default is an error. 2334 static const signed char yydefact_[]; 2335 2336 // YYPGOTO[NTERM-NUM]. 2337 static const short yypgoto_[]; 2338 2339 // YYDEFGOTO[NTERM-NUM]. 2340 static const short yydefgoto_[]; 2341 2342 // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If 2343 // positive, shift that token. If negative, reduce the rule whose 2344 // number is the opposite. If YYTABLE_NINF, syntax error. 2345 static const short yytable_[]; 2346 2347 static const unsigned char yycheck_[]; 2348 2349 // YYSTOS[STATE-NUM] -- The (internal number of the) accessing 2350 // symbol of state STATE-NUM. 2351 static const signed char yystos_[]; 2352 2353 // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. 2354 static const signed char yyr1_[]; 2355 2356 // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. 2357 static const signed char yyr2_[]; 2358 2359 2360 #if YYDEBUG 2361 // YYRLINE[YYN] -- Source line where rule number YYN was defined. 2362 static const short yyrline_[]; 2363 /// Report on the debug stream that the rule \a r is going to be reduced. 2364 virtual void yy_reduce_print_ (int r) const; 2365 /// Print the state stack on the debug stream. 2366 virtual void yy_stack_print_ () const; 2367 2368 /// Debugging level. 2369 int yydebug_; 2370 /// Debug stream. 2371 std::ostream* yycdebug_; 2372 2373 /// \brief Display a symbol kind, value and location. 2374 /// \param yyo The output stream. 2375 /// \param yysym The symbol. 2376 template <typename Base> 2377 void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const; 2378 #endif 2379 2380 /// \brief Reclaim the memory associated to a symbol. 2381 /// \param yymsg Why this token is reclaimed. 2382 /// If null, print nothing. 2383 /// \param yysym The symbol. 2384 template <typename Base> 2385 void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const; 2386 2387 private: 2388 /// Type access provider for state based symbols. 2389 struct by_state 2390 { 2391 /// Default constructor. 2392 by_state () YY_NOEXCEPT; 2393 2394 /// The symbol kind as needed by the constructor. 2395 typedef state_type kind_type; 2396 2397 /// Constructor. 2398 by_state (kind_type s) YY_NOEXCEPT; 2399 2400 /// Copy constructor. 2401 by_state (const by_state& that) YY_NOEXCEPT; 2402 2403 /// Record that this symbol is empty. 2404 void clear () YY_NOEXCEPT; 2405 2406 /// Steal the symbol kind from \a that. 2407 void move (by_state& that); 2408 2409 /// The symbol kind (corresponding to \a state). 2410 /// \a symbol_kind::S_YYEMPTY when empty. 2411 symbol_kind_type kind () const YY_NOEXCEPT; 2412 2413 /// The state number used to denote an empty symbol. 2414 /// We use the initial state, as it does not have a value. 2415 enum { empty_state = 0 }; 2416 2417 /// The state. 2418 /// \a empty when empty. 2419 state_type state; 2420 }; 2421 2422 /// "Internal" symbol: element of the stack. 2423 struct stack_symbol_type : basic_symbol<by_state> 2424 { 2425 /// Superclass. 2426 typedef basic_symbol<by_state> super_type; 2427 /// Construct an empty symbol. 2428 stack_symbol_type (); 2429 /// Move or copy construction. 2430 stack_symbol_type (YY_RVREF (stack_symbol_type) that); 2431 /// Steal the contents from \a sym to build this. 2432 stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); 2433 #if YY_CPLUSPLUS < 201103L 2434 /// Assignment, needed by push_back by some old implementations. 2435 /// Moves the contents of that. 2436 stack_symbol_type& operator= (stack_symbol_type& that); 2437 2438 /// Assignment, needed by push_back by other implementations. 2439 /// Needed by some other old implementations. 2440 stack_symbol_type& operator= (const stack_symbol_type& that); 2441 #endif 2442 }; 2443 2444 /// A stack with random access from its top. 2445 template <typename T, typename S = std::vector<T> > 2446 class stack 2447 { 2448 public: 2449 // Hide our reversed order. 2450 typedef typename S::iterator iterator; 2451 typedef typename S::const_iterator const_iterator; 2452 typedef typename S::size_type size_type; 2453 typedef typename std::ptrdiff_t index_type; 2454 stack(size_type n=200)2455 stack (size_type n = 200) 2456 : seq_ (n) 2457 {} 2458 2459 #if 201103L <= YY_CPLUSPLUS 2460 /// Non copyable. 2461 stack (const stack&) = delete; 2462 /// Non copyable. 2463 stack& operator= (const stack&) = delete; 2464 #endif 2465 2466 /// Random access. 2467 /// 2468 /// Index 0 returns the topmost element. 2469 const T& operator [](index_type i) const2470 operator[] (index_type i) const 2471 { 2472 return seq_[size_type (size () - 1 - i)]; 2473 } 2474 2475 /// Random access. 2476 /// 2477 /// Index 0 returns the topmost element. 2478 T& operator [](index_type i)2479 operator[] (index_type i) 2480 { 2481 return seq_[size_type (size () - 1 - i)]; 2482 } 2483 2484 /// Steal the contents of \a t. 2485 /// 2486 /// Close to move-semantics. 2487 void push(YY_MOVE_REF (T)t)2488 push (YY_MOVE_REF (T) t) 2489 { 2490 seq_.push_back (T ()); 2491 operator[] (0).move (t); 2492 } 2493 2494 /// Pop elements from the stack. 2495 void pop(std::ptrdiff_t n=1)2496 pop (std::ptrdiff_t n = 1) YY_NOEXCEPT 2497 { 2498 for (; 0 < n; --n) 2499 seq_.pop_back (); 2500 } 2501 2502 /// Pop all elements from the stack. 2503 void clear()2504 clear () YY_NOEXCEPT 2505 { 2506 seq_.clear (); 2507 } 2508 2509 /// Number of elements on the stack. 2510 index_type size() const2511 size () const YY_NOEXCEPT 2512 { 2513 return index_type (seq_.size ()); 2514 } 2515 2516 /// Iterator on top of the stack (going downwards). 2517 const_iterator begin() const2518 begin () const YY_NOEXCEPT 2519 { 2520 return seq_.begin (); 2521 } 2522 2523 /// Bottom of the stack. 2524 const_iterator end() const2525 end () const YY_NOEXCEPT 2526 { 2527 return seq_.end (); 2528 } 2529 2530 /// Present a slice of the top of a stack. 2531 class slice 2532 { 2533 public: slice(const stack & stack,index_type range)2534 slice (const stack& stack, index_type range) 2535 : stack_ (stack) 2536 , range_ (range) 2537 {} 2538 2539 const T& operator [](index_type i) const2540 operator[] (index_type i) const 2541 { 2542 return stack_[range_ - i]; 2543 } 2544 2545 private: 2546 const stack& stack_; 2547 index_type range_; 2548 }; 2549 2550 private: 2551 #if YY_CPLUSPLUS < 201103L 2552 /// Non copyable. 2553 stack (const stack&); 2554 /// Non copyable. 2555 stack& operator= (const stack&); 2556 #endif 2557 /// The wrapped container. 2558 S seq_; 2559 }; 2560 2561 2562 /// Stack type. 2563 typedef stack<stack_symbol_type> stack_type; 2564 2565 /// The stack. 2566 stack_type yystack_; 2567 /// The stack for LAC. 2568 /// Logically, the yy_lac_stack's lifetime is confined to the function 2569 /// yy_lac_check_. We just store it as a member of this class to hold 2570 /// on to the memory and to avoid frequent reallocations. 2571 /// Since yy_lac_check_ is const, this member must be mutable. 2572 mutable std::vector<state_type> yylac_stack_; 2573 /// Whether an initial LAC context was established. 2574 bool yy_lac_established_; 2575 2576 2577 /// Push a new state on the stack. 2578 /// \param m a debug message to display 2579 /// if null, no trace is output. 2580 /// \param sym the symbol 2581 /// \warning the contents of \a s.value is stolen. 2582 void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); 2583 2584 /// Push a new look ahead token on the state on the stack. 2585 /// \param m a debug message to display 2586 /// if null, no trace is output. 2587 /// \param s the state 2588 /// \param sym the symbol (for its value and location). 2589 /// \warning the contents of \a sym.value is stolen. 2590 void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); 2591 2592 /// Pop \a n symbols from the stack. 2593 void yypop_ (int n = 1); 2594 2595 /// Constants. 2596 enum 2597 { 2598 yylast_ = 205, ///< Last index in yytable_. 2599 yynnts_ = 27, ///< Number of nonterminal symbols. 2600 yyfinal_ = 96 ///< Termination state number. 2601 }; 2602 2603 2604 // User arguments. 2605 pio_assembler& pioasm; 2606 2607 }; 2608 2609 inline 2610 parser::symbol_kind_type yytranslate_(int t)2611 parser::yytranslate_ (int t) 2612 { 2613 // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to 2614 // TOKEN-NUM as returned by yylex. 2615 static 2616 const signed char 2617 translate_table[] = 2618 { 2619 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2620 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2622 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2623 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2624 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2625 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2626 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2627 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2628 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2629 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2630 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2631 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2632 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2633 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2634 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2635 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2636 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2637 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2638 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2639 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2640 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2641 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2642 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2643 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2644 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 2645 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 2646 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 2647 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 2648 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 2649 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 2650 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 2651 65, 66, 67, 68, 69 2652 }; 2653 // Last valid token kind. 2654 const int code_max = 324; 2655 2656 if (t <= 0) 2657 return symbol_kind::S_YYEOF; 2658 else if (t <= code_max) 2659 return YY_CAST (symbol_kind_type, translate_table[t]); 2660 else 2661 return symbol_kind::S_YYUNDEF; 2662 } 2663 2664 // basic_symbol. 2665 template <typename Base> basic_symbol(const basic_symbol & that)2666 parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that) 2667 : Base (that) 2668 , value () 2669 , location (that.location) 2670 { 2671 switch (this->kind ()) 2672 { 2673 case symbol_kind::S_if_full: // if_full 2674 case symbol_kind::S_if_empty: // if_empty 2675 case symbol_kind::S_blocking: // blocking 2676 value.copy< bool > (YY_MOVE (that.value)); 2677 break; 2678 2679 case symbol_kind::S_condition: // condition 2680 value.copy< enum condition > (YY_MOVE (that.value)); 2681 break; 2682 2683 case symbol_kind::S_in_source: // in_source 2684 case symbol_kind::S_out_target: // out_target 2685 case symbol_kind::S_set_target: // set_target 2686 value.copy< enum in_out_set > (YY_MOVE (that.value)); 2687 break; 2688 2689 case symbol_kind::S_irq_modifiers: // irq_modifiers 2690 value.copy< enum irq > (YY_MOVE (that.value)); 2691 break; 2692 2693 case symbol_kind::S_mov_target: // mov_target 2694 case symbol_kind::S_mov_source: // mov_source 2695 value.copy< enum mov > (YY_MOVE (that.value)); 2696 break; 2697 2698 case symbol_kind::S_mov_op: // mov_op 2699 value.copy< enum mov_op > (YY_MOVE (that.value)); 2700 break; 2701 2702 case symbol_kind::S_INT: // "integer" 2703 value.copy< int > (YY_MOVE (that.value)); 2704 break; 2705 2706 case symbol_kind::S_instruction: // instruction 2707 case symbol_kind::S_base_instruction: // base_instruction 2708 value.copy< std::shared_ptr<instruction> > (YY_MOVE (that.value)); 2709 break; 2710 2711 case symbol_kind::S_value: // value 2712 case symbol_kind::S_expression: // expression 2713 case symbol_kind::S_delay: // delay 2714 case symbol_kind::S_sideset: // sideset 2715 value.copy< std::shared_ptr<resolvable> > (YY_MOVE (that.value)); 2716 break; 2717 2718 case symbol_kind::S_label_decl: // label_decl 2719 case symbol_kind::S_symbol_def: // symbol_def 2720 value.copy< std::shared_ptr<symbol> > (YY_MOVE (that.value)); 2721 break; 2722 2723 case symbol_kind::S_wait_source: // wait_source 2724 value.copy< std::shared_ptr<wait_source> > (YY_MOVE (that.value)); 2725 break; 2726 2727 case symbol_kind::S_ID: // "identifier" 2728 case symbol_kind::S_STRING: // "string" 2729 case symbol_kind::S_NON_WS: // "text" 2730 case symbol_kind::S_CODE_BLOCK_START: // "code block" 2731 case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" 2732 case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE 2733 value.copy< std::string > (YY_MOVE (that.value)); 2734 break; 2735 2736 default: 2737 break; 2738 } 2739 2740 } 2741 2742 2743 2744 template <typename Base> 2745 parser::symbol_kind_type type_get() const2746 parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT 2747 { 2748 return this->kind (); 2749 } 2750 2751 template <typename Base> 2752 bool empty() const2753 parser::basic_symbol<Base>::empty () const YY_NOEXCEPT 2754 { 2755 return this->kind () == symbol_kind::S_YYEMPTY; 2756 } 2757 2758 template <typename Base> 2759 void move(basic_symbol & s)2760 parser::basic_symbol<Base>::move (basic_symbol& s) 2761 { 2762 super_type::move (s); 2763 switch (this->kind ()) 2764 { 2765 case symbol_kind::S_if_full: // if_full 2766 case symbol_kind::S_if_empty: // if_empty 2767 case symbol_kind::S_blocking: // blocking 2768 value.move< bool > (YY_MOVE (s.value)); 2769 break; 2770 2771 case symbol_kind::S_condition: // condition 2772 value.move< enum condition > (YY_MOVE (s.value)); 2773 break; 2774 2775 case symbol_kind::S_in_source: // in_source 2776 case symbol_kind::S_out_target: // out_target 2777 case symbol_kind::S_set_target: // set_target 2778 value.move< enum in_out_set > (YY_MOVE (s.value)); 2779 break; 2780 2781 case symbol_kind::S_irq_modifiers: // irq_modifiers 2782 value.move< enum irq > (YY_MOVE (s.value)); 2783 break; 2784 2785 case symbol_kind::S_mov_target: // mov_target 2786 case symbol_kind::S_mov_source: // mov_source 2787 value.move< enum mov > (YY_MOVE (s.value)); 2788 break; 2789 2790 case symbol_kind::S_mov_op: // mov_op 2791 value.move< enum mov_op > (YY_MOVE (s.value)); 2792 break; 2793 2794 case symbol_kind::S_INT: // "integer" 2795 value.move< int > (YY_MOVE (s.value)); 2796 break; 2797 2798 case symbol_kind::S_instruction: // instruction 2799 case symbol_kind::S_base_instruction: // base_instruction 2800 value.move< std::shared_ptr<instruction> > (YY_MOVE (s.value)); 2801 break; 2802 2803 case symbol_kind::S_value: // value 2804 case symbol_kind::S_expression: // expression 2805 case symbol_kind::S_delay: // delay 2806 case symbol_kind::S_sideset: // sideset 2807 value.move< std::shared_ptr<resolvable> > (YY_MOVE (s.value)); 2808 break; 2809 2810 case symbol_kind::S_label_decl: // label_decl 2811 case symbol_kind::S_symbol_def: // symbol_def 2812 value.move< std::shared_ptr<symbol> > (YY_MOVE (s.value)); 2813 break; 2814 2815 case symbol_kind::S_wait_source: // wait_source 2816 value.move< std::shared_ptr<wait_source> > (YY_MOVE (s.value)); 2817 break; 2818 2819 case symbol_kind::S_ID: // "identifier" 2820 case symbol_kind::S_STRING: // "string" 2821 case symbol_kind::S_NON_WS: // "text" 2822 case symbol_kind::S_CODE_BLOCK_START: // "code block" 2823 case symbol_kind::S_CODE_BLOCK_CONTENTS: // "%}" 2824 case symbol_kind::S_UNKNOWN_DIRECTIVE: // UNKNOWN_DIRECTIVE 2825 value.move< std::string > (YY_MOVE (s.value)); 2826 break; 2827 2828 default: 2829 break; 2830 } 2831 2832 location = YY_MOVE (s.location); 2833 } 2834 2835 // by_kind. 2836 inline by_kind()2837 parser::by_kind::by_kind () 2838 : kind_ (symbol_kind::S_YYEMPTY) 2839 {} 2840 2841 #if 201103L <= YY_CPLUSPLUS 2842 inline by_kind(by_kind && that)2843 parser::by_kind::by_kind (by_kind&& that) 2844 : kind_ (that.kind_) 2845 { 2846 that.clear (); 2847 } 2848 #endif 2849 2850 inline by_kind(const by_kind & that)2851 parser::by_kind::by_kind (const by_kind& that) 2852 : kind_ (that.kind_) 2853 {} 2854 2855 inline by_kind(token_kind_type t)2856 parser::by_kind::by_kind (token_kind_type t) 2857 : kind_ (yytranslate_ (t)) 2858 {} 2859 2860 inline 2861 void clear()2862 parser::by_kind::clear () 2863 { 2864 kind_ = symbol_kind::S_YYEMPTY; 2865 } 2866 2867 inline 2868 void move(by_kind & that)2869 parser::by_kind::move (by_kind& that) 2870 { 2871 kind_ = that.kind_; 2872 that.clear (); 2873 } 2874 2875 inline 2876 parser::symbol_kind_type kind() const2877 parser::by_kind::kind () const YY_NOEXCEPT 2878 { 2879 return kind_; 2880 } 2881 2882 inline 2883 parser::symbol_kind_type type_get() const2884 parser::by_kind::type_get () const YY_NOEXCEPT 2885 { 2886 return this->kind (); 2887 } 2888 2889 } // yy 2890 2891 2892 2893 2894 #endif // !YY_YY_HOME_GRAHAM_DEV_MU_PICO_SDK_TOOLS_PIOASM_GEN_PARSER_HPP_INCLUDED 2895