PageRenderTime 55ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/parser.y

https://github.com/gitpan/Rinchi-Fortran-Preprocessor
Happy | 1834 lines | 1485 code | 349 blank | 0 comment | 0 complexity | 72458533a1c130f5e859ed4f0c946462 MD5 | raw file
  1. %{
  2. #include <stdio.h>
  3. #include "parser_routines.h"
  4. #include "tree.h"
  5. #include "lexer.h"
  6. #define YYDEBUG 1
  7. #define YYERROR_VERBOSE 1
  8. //define YYSTYPE int
  9. char *getCurrentFilename();
  10. void yyerror(char const *s);
  11. int yypp_lex (void);
  12. %}
  13. %no-lines
  14. %name-prefix="yypp_"
  15. %locations
  16. %union {
  17. float fval;
  18. char *sval;
  19. unsigned int uval;
  20. int ival;
  21. long lval;
  22. }
  23. %token ECS_NULL
  24. %token ASC_SOH
  25. %token ASC_STX
  26. %token ASC_ETX
  27. %token ASC_EOT
  28. %token ASC_ENQ
  29. %token ASC_ACK
  30. %token ECS_ALERT
  31. %token ECS_BACKSPACE
  32. %token BCS_WHTSP_TAB
  33. %token BCS_WHTSP_NEWLINE
  34. %token BCS_WHTSP_VERTICAL_TAB
  35. %token BCS_WHTSP_FORMFEED
  36. %token ECS_CARRIAGE_RETURN
  37. %token ASC_SHIFT_OUT
  38. %token ASC_SHIFT_IN
  39. %token ASC_DLE
  40. %token ASC_DC1
  41. %token ASC_DC2
  42. %token ASC_DC3
  43. %token ASC_DC4
  44. %token ASC_NAK
  45. %token ASC_SYN
  46. %token ASC_ETB
  47. %token ASC_CAN
  48. %token ASC_EM
  49. %token ASC_SUB
  50. %token ASC_ESC
  51. %token ASC_IS4
  52. %token ASC_IS3
  53. %token ASC_IS2
  54. %token ASC_IS1
  55. %token BCS_WHTSP_SPACE
  56. %token BCS_PUNCT_EXCLAMATION
  57. %token BCS_PUNCT_QUOTE
  58. %token BCS_PUNCT_HASH
  59. %token ASC_DOLLAR_SIGN
  60. %token BCS_PUNCT_PERCENT
  61. %token BCS_PUNCT_AMPERSAND
  62. %token BCS_PUNCT_APOSTROPHE
  63. %token BCS_PUNCT_OPEN_PARENTHESIS
  64. %token BCS_PUNCT_CLOSE_PARENTHESIS
  65. %token BCS_PUNCT_ASTERISK
  66. %token BCS_PUNCT_PLUS
  67. %token BCS_PUNCT_COMMA
  68. %token BCS_PUNCT_MINUS
  69. %token BCS_PUNCT_PERIOD
  70. %token BCS_PUNCT_SLASH
  71. %token BCS_DIGIT_0
  72. %token BCS_DIGIT_1
  73. %token BCS_DIGIT_2
  74. %token BCS_DIGIT_3
  75. %token BCS_DIGIT_4
  76. %token BCS_DIGIT_5
  77. %token BCS_DIGIT_6
  78. %token BCS_DIGIT_7
  79. %token BCS_DIGIT_8
  80. %token BCS_DIGIT_9
  81. %token BCS_PUNCT_COLON
  82. %token BCS_PUNCT_SEMICOLON
  83. %token BCS_PUNCT_LESS_THAN
  84. %token BCS_PUNCT_EQUAL
  85. %token BCS_PUNCT_GREATER_THAN
  86. %token BCS_PUNCT_QUESTION
  87. %token ASC_AT_SIGN
  88. %token BCS_UPPER_A
  89. %token BCS_UPPER_B
  90. %token BCS_UPPER_C
  91. %token BCS_UPPER_D
  92. %token BCS_UPPER_E
  93. %token BCS_UPPER_F
  94. %token BCS_UPPER_G
  95. %token BCS_UPPER_H
  96. %token BCS_UPPER_I
  97. %token BCS_UPPER_J
  98. %token BCS_UPPER_K
  99. %token BCS_UPPER_L
  100. %token BCS_UPPER_M
  101. %token BCS_UPPER_N
  102. %token BCS_UPPER_O
  103. %token BCS_UPPER_P
  104. %token BCS_UPPER_Q
  105. %token BCS_UPPER_R
  106. %token BCS_UPPER_S
  107. %token BCS_UPPER_T
  108. %token BCS_UPPER_U
  109. %token BCS_UPPER_V
  110. %token BCS_UPPER_W
  111. %token BCS_UPPER_X
  112. %token BCS_UPPER_Y
  113. %token BCS_UPPER_Z
  114. %token BCS_PUNCT_OPEN_BRACKET
  115. %token BCS_PUNCT_BACKSLASH
  116. %token BCS_PUNCT_CLOSE_BRACKET
  117. %token BCS_PUNCT_CARET
  118. %token BCS_PUNCT_UNDERSCORE
  119. %token BCS_LOWER_A
  120. %token BCS_LOWER_B
  121. %token BCS_LOWER_C
  122. %token BCS_LOWER_D
  123. %token BCS_LOWER_E
  124. %token BCS_LOWER_F
  125. %token BCS_LOWER_G
  126. %token BCS_LOWER_H
  127. %token BCS_LOWER_I
  128. %token BCS_LOWER_J
  129. %token BCS_LOWER_K
  130. %token BCS_LOWER_L
  131. %token BCS_LOWER_M
  132. %token BCS_LOWER_N
  133. %token BCS_LOWER_O
  134. %token BCS_LOWER_P
  135. %token BCS_LOWER_Q
  136. %token BCS_LOWER_R
  137. %token BCS_LOWER_S
  138. %token BCS_LOWER_T
  139. %token BCS_LOWER_U
  140. %token BCS_LOWER_V
  141. %token BCS_LOWER_W
  142. %token BCS_LOWER_X
  143. %token BCS_LOWER_Y
  144. %token BCS_LOWER_Z
  145. %token BCS_PUNCT_OPEN_BRACE
  146. %token BCS_PUNCT_VERTICAL_BAR
  147. %token BCS_PUNCT_CLOSE_BRACE
  148. %token BCS_PUNCT_TILDE
  149. %token ASC_DEL
  150. %token ALT_PUNCT_OPEN_BRACE
  151. %token ALT_PUNCT_CLOSE_BRACE
  152. %token ALT_PUNCT_OPEN_BRACKET
  153. %token ALT_PUNCT_CLOSE_BRACKET
  154. %token ALT_PUNCT_HASH
  155. %token PUNC_DBL_COLON
  156. %token PUNC_ARROW
  157. %token KWD_ABSTRACT
  158. %token KWD_ABSTRACT_INTERFACE
  159. %token KWD_ACCESS
  160. %token KWD_ACTION
  161. %token KWD_ADVANCE
  162. %token KWD_ALLOCATABLE
  163. %token KWD_ALLOCATE
  164. %token KWD_ASSIGN
  165. %token KWD_ASSOCIATE
  166. %token KWD_ASYNCHRONOUS
  167. %token KWD_BACKSPACE
  168. %token KWD_BIND
  169. %token KWD_BLANK
  170. %token KWD_BLOCK
  171. %token KWD_BLOCK_DATA
  172. %token KWD_CALL
  173. %token KWD_CASE
  174. %token KWD_CHARACTER
  175. %token KWD_CLASS
  176. %token KWD_CLASS_DEFAULT
  177. %token KWD_CLASS_IS
  178. %token KWD_CLOSE
  179. %token KWD_COMMON
  180. %token KWD_COMPLEX
  181. %token KWD_CONTAINS
  182. %token KWD_CONTIGUOUS
  183. %token KWD_CONTINUE
  184. %token KWD_CYCLE
  185. %token KWD_DATA
  186. %token KWD_DEALLOCATE
  187. %token KWD_DEFAULT
  188. %token KWD_DEFERRED
  189. %token KWD_DIMENSION
  190. %token KWD_DIRECT
  191. %token KWD_DO
  192. %token KWD_DOUBLE
  193. %token KWD_DOUBLE_COMPLEX
  194. %token KWD_DOUBLE_PRECISION
  195. %token KWD_ELEMENTAL
  196. %token KWD_ELSE
  197. %token KWD_ELSE_IF
  198. %token KWD_ELSE_WHERE
  199. %token KWD_ENCODING
  200. %token KWD_END
  201. %token KWD_END_ASSOCIATE
  202. %token KWD_END_BLOCK
  203. %token KWD_END_BLOCK_DATA
  204. %token KWD_END_DO
  205. %token KWD_END_ENUM
  206. %token KWD_END_FILE
  207. %token KWD_END_FORALL
  208. %token KWD_END_FUNCTION
  209. %token KWD_END_IF
  210. %token KWD_END_INTERFACE
  211. %token KWD_END_MODULE
  212. %token KWD_END_PROCEDURE
  213. %token KWD_END_PROGRAM
  214. %token KWD_END_SELECT
  215. %token KWD_END_SUBMODULE
  216. %token KWD_END_SUBROUTINE
  217. %token KWD_END_TYPE
  218. %token KWD_END_WHERE
  219. %token KWD_ENTRY
  220. %token KWD_EOR
  221. %token KWD_EQUIVALENCE
  222. %token KWD_ERR
  223. %token KWD_ERRMSG
  224. %token KWD_EXIST
  225. %token KWD_EXIT
  226. %token KWD_EXTENDS
  227. %token KWD_EXTENSIBLE
  228. %token KWD_EXTERNAL
  229. %token KWD_FALSE
  230. %token KWD_FILE
  231. %token KWD_FINAL
  232. %token KWD_FLUSH
  233. %token KWD_FMT
  234. %token KWD_FORALL
  235. %token KWD_FORM
  236. %token KWD_FORMAT
  237. %token KWD_FORMATTED
  238. %token KWD_FUNCTION
  239. %token KWD_GENERIC
  240. %token KWD_GOTO
  241. %token KWD_IF
  242. %token KWD_IMPLICIT
  243. %token KWD_IMPLICIT_NONE
  244. %token KWD_IMPORT
  245. %token KWD_IMPURE
  246. %token KWD_IN
  247. %token KWD_IN_OUT
  248. %token KWD_INCLUDE
  249. %token KWD_INQUIRE
  250. %token KWD_INTEGER
  251. %token KWD_INTENT
  252. %token KWD_INTERFACE
  253. %token KWD_INTRINSIC
  254. %token KWD_IOSTAT
  255. %token KWD_IOMSG
  256. %token KWD_KIND
  257. %token KWD_LET
  258. %token KWD_LOGICAL
  259. %token KWD_MODULE
  260. %token KWD_MOLD
  261. %token KWD_NAME
  262. %token KWD_NAMED
  263. %token KWD_NAMELIST
  264. %token KWD_NEXTREC
  265. %token KWD_NON_INTRINSIC
  266. %token KWD_NON_OVERRIDABLE
  267. %token KWD_NONKIND
  268. %token KWD_NONE
  269. %token KWD_NOPASS
  270. %token KWD_NULLIFY
  271. %token KWD_NUMBER
  272. %token KWD_OPEN
  273. %token KWD_OPENED
  274. %token KWD_OPERATOR
  275. %token KWD_OPTIONAL
  276. %token KWD_OUT
  277. %token KWD_PAD
  278. %token KWD_PARAMETER
  279. %token KWD_PASS
  280. %token KWD_PAUSE
  281. %token KWD_PENDING
  282. %token KWD_POINTER
  283. %token KWD_POSITION
  284. %token KWD_PRECISION
  285. %token KWD_PRINT
  286. %token KWD_PRIVATE
  287. %token KWD_PROCEDURE
  288. %token KWD_PROGRAM
  289. %token KWD_PROTECTED
  290. %token KWD_PUBLIC
  291. %token KWD_PURE
  292. %token KWD_READ
  293. %token KWD_READ_FORMATTED
  294. %token KWD_READ_UNFORMATTED
  295. %token KWD_READWRITE
  296. %token KWD_REAL
  297. %token KWD_REC
  298. %token KWD_RECL
  299. %token KWD_RETURN
  300. %token KWD_REWIND
  301. %token KWD_ROUND
  302. %token KWD_SAVE
  303. %token KWD_SELECT_CASE
  304. %token KWD_SELECT_TYPE
  305. %token KWD_SEQUENCE
  306. %token KWD_SEQUENTIAL
  307. %token KWD_SIGN
  308. %token KWD_SIZE
  309. %token KWD_SOURCE
  310. %token KWD_STATUS
  311. %token KWD_STOP
  312. %token KWD_STREAM
  313. %token KWD_SUBMODULE
  314. %token KWD_SUBROUTINE
  315. %token KWD_TARGET
  316. %token KWD_THEN
  317. %token KWD_TRUE
  318. %token KWD_TYPE
  319. %token KWD_UNFORMATTED
  320. %token KWD_UNIT
  321. %token KWD_USE
  322. %token KWD_VALUE
  323. %token KWD_VOLATILE
  324. %token KWD_WHERE
  325. %token KWD_WRITE
  326. %token KWD_WRITE_FORMATTED
  327. %token KWD_WRITE_UNFORMATTED
  328. %token PPD_NULL
  329. %token PPD_DEFINE
  330. %token PPD_ELIF
  331. %token PPD_ELSE
  332. %token PPD_ENDIF
  333. %token PPD_ERROR
  334. %token PPD_WARNING
  335. %token PPD_IF
  336. %token PPD_IFDEF
  337. %token PPD_IFNDEF
  338. %token PPD_INCLUDE
  339. %token PPD_LINE
  340. %token PPD_PRAGMA
  341. %token PPD_UNDEF
  342. %token OP_LOGICAL_NOT
  343. %token OP_NE
  344. %token OP_STRINGIZE
  345. %token OP_TOKEN_SPLICE
  346. %token OP_MODULO
  347. %token ALT_OP_TOKEN_SPLICE
  348. %token OP_ASSIGN_MODULO
  349. %token OP_BIT_AND
  350. %token OP_ADDRESS
  351. %token OP_LOGICAL_AND
  352. %token OP_ASSIGN_BIT_AND
  353. %token OP_DEREFERENCE
  354. %token OP_MULTIPLY
  355. %token OP_ASSIGN_MULTIPLY
  356. %token OP_PLUS
  357. %token OP_INCREMENT
  358. %token OP_ASSIGN_PLUS
  359. %token OP_MINUS
  360. %token OP_DECREMENT
  361. %token OP_ASSIGN_MINUS
  362. %token OP_POINTER_MEMBER
  363. %token OP_POINTER_POINTER_TO_MEMBER
  364. %token OP_OBJECT_MEMBER
  365. %token OP_OBJECT_POINTER_TO_MEMBER
  366. %token OP_DIVIDE
  367. %token OP_ASSIGN_DIVIDE
  368. %token OP_ELSE
  369. %token OP_LT
  370. %token OP_SHIFT_LEFT
  371. %token OP_ASSIGN_SHIFT_LEFT
  372. %token OP_LE
  373. %token OP_ASSIGN
  374. %token OP_EQ
  375. %token OP_GT
  376. %token OP_GE
  377. %token OP_SHIFT_RIGHT
  378. %token OP_ASSIGN_SHIFT_RIGHT
  379. %token OP_CONDITIONAL
  380. %token OP_BIT_PLUS
  381. %token OP_ASSIGN_BIT_PLUS
  382. %token OP_BIT_OR
  383. %token OP_ASSIGN_BIT_OR
  384. %token OP_LOGICAL_OR
  385. %token OP_BIT_NOT
  386. %token OP_ALT_LOGICAL_AND
  387. %token OP_ALT_ASSIGN_BIT_AND
  388. %token OP_ALT_BIT_AND
  389. %token OP_ALT_BIT_OR
  390. %token OP_ALT_BIT_NOT
  391. %token OP_ALT_LOGICAL_NOT
  392. %token OP_ALT_NE
  393. %token OP_ALT_LOGICAL_OR
  394. %token OP_ALT_ASSIGN_BIT_OR
  395. %token OP_ALT_BIT_PLUS
  396. %token OP_ALT_ASSIGN_BIT_PLUS
  397. %token OPEN_PARENTHESIS_SLASH
  398. %token CLOSE_PARENTHESIS_SLASH
  399. %token INV_ALT_LOGICAL_AND
  400. %token INV_ALT_ASSIGN_BIT_AND
  401. %token INV_ALT_BIT_AND
  402. %token INV_ALT_BIT_OR
  403. %token INV_ALT_BIT_NOT
  404. %token INV_ALT_LOGICAL_NOT
  405. %token INV_ALT_NE
  406. %token INV_ALT_LOGICAL_OR
  407. %token INV_ALT_ASSIGN_BIT_OR
  408. %token INV_ALT_BIT_PLUS
  409. %token INV_ALT_ASSIGN_BIT_PLUS
  410. %token INV_MFI_LOGICAL_AND
  411. %token INV_MFI_ASSIGN_BIT_AND
  412. %token INV_MFI_BIT_AND
  413. %token INV_MFI_BIT_OR
  414. %token INV_MFI_BIT_NOT
  415. %token INV_MFI_LOGICAL_NOT
  416. %token INV_MFI_NE
  417. %token INV_MFI_LOGICAL_OR
  418. %token INV_MFI_ASSIGN_BIT_OR
  419. %token INV_MFI_BIT_PLUS
  420. %token INV_MFI_ASSIGN_BIT_PLUS
  421. %token DECL_REFERENCE
  422. %token DECL_POINTER
  423. %token DECL_VAR_ARGS
  424. %token WHITE_SPACE
  425. %token SYSTEM_HEADER_STRING
  426. %token HEADER_STRING
  427. %token IDENTIFIER
  428. %token NON_REPLACEABLE_IDENTIFIER
  429. %token MACRO_FUNCTION_IDENTIFIER
  430. %token MACRO_OBJECT_IDENTIFIER
  431. %token PP_NUMBER
  432. %token CHARACTER_LITERAL
  433. %token L_CHARACTER_LITERAL
  434. %token STRING_LITERAL
  435. %token L_STRING_LITERAL
  436. %token <lval> INTEGER_LITERAL
  437. %token <lval> OCTAL_LITERAL
  438. %token <lval> DECIMAL_LITERAL
  439. %token <lval> HEXADECIMAL_LITERAL
  440. %token FLOATING_LITERAL
  441. %token <sval> UNIVERSAL_CHARACTER_NAME
  442. %token <sval> USE_ON_CODE
  443. %token PUNC_INITIALIZE
  444. %token PUNC_SYNONYM
  445. %token DONT_CARE
  446. %token <sval> RESERVED_WORD
  447. %token <sval> ACCESS_SPECIFIER
  448. %token <ival> BOOLEAN_LITERAL
  449. %token <sval> CV_QUALIFIER
  450. %token <sval> INTRINSIC_TYPE
  451. %token <sval> FUNCTION_SPECIFIER
  452. %token <sval> STORAGE_CLASS_SPECIFIER
  453. %token <sval> USER_TOKEN
  454. %token <sval> SYMBOL
  455. %token <sval> COMMENT
  456. %token <sval> BLOCK_COMMENT
  457. %token END_OF_STATEMENT
  458. %token BLOCK_OPEN
  459. %token BLOCK_CLOSE
  460. %token LIST_OPEN
  461. %token LIST_SEPARATOR
  462. %token LIST_CLOSE
  463. %type <lval> pp_constant_expression
  464. %type <lval> pp_expression
  465. %type <lval> pp_conditional_expression
  466. %type <lval> pp_logical_or_expression
  467. %type <lval> pp_logical_and_expression
  468. %type <lval> pp_inclusive_or_expression
  469. %type <lval> pp_exclusive_or_expression
  470. %type <lval> pp_and_expression
  471. %type <lval> pp_equality_expression
  472. %type <lval> pp_relational_expression
  473. %type <lval> pp_shift_expression
  474. %type <lval> pp_additive_expression
  475. %type <lval> pp_multiplicative_expression
  476. %type <lval> pp_unary_expression
  477. %type <lval> pp_primary_expression
  478. %type <lval> pp_boolean_literal
  479. %type <lval> pp_integer_literal
  480. %type <lval> pp_octal_literal
  481. %type <lval> pp_decimal_literal
  482. %type <lval> pp_hexadecimal_literal
  483. %%
  484. preprocessing_file: { handle_file_begin(preprocessing_file_index); } group_part_seq_opt {handle_file_end(preprocessing_file_index); }
  485. ;
  486. group_part_seq_opt: /* empty */
  487. | group_part_seq
  488. ;
  489. group_part_seq: group_part
  490. | group_part_seq group_part
  491. ;
  492. group_part: { /* handle_token(group_part_index); */ } preprocessing_token_seq_opt new_line
  493. | if_section
  494. | control_line
  495. ;
  496. if_section: if_group elif_group_seq_opt else_group_opt endif_line
  497. ;
  498. if_open: PPD_IF pp_constant_expression { handle_if_open(PPD_IF_INDEX, $2); }
  499. | PPD_IF string_literal { handle_if_open(PPD_IF_INDEX, 0); }
  500. ;
  501. ifdef_open: PPD_IFDEF
  502. ;
  503. ifndef_open: PPD_IFNDEF
  504. ;
  505. ifdef_identifier: IDENTIFIER { handle_ifdef_open(PPD_IFDEF_INDEX); }
  506. ;
  507. ifndef_identifier: IDENTIFIER { handle_ifndef_open(PPD_IFNDEF_INDEX); }
  508. ;
  509. if_group: if_open new_line group_part_seq_opt
  510. | ifdef_open ifdef_identifier new_line group_part_seq_opt
  511. | ifndef_open ifndef_identifier new_line group_part_seq_opt
  512. | ifdef_open invalid_ifdef_identifier new_line group_part_seq_opt
  513. | ifndef_open invalid_ifndef_identifier new_line group_part_seq_opt
  514. ;
  515. elif_group_seq_opt: /* empty */
  516. | elif_group_seq
  517. ;
  518. elif_group_seq: elif_group
  519. | elif_group_seq elif_group
  520. ;
  521. elif_group_open: PPD_ELIF pp_constant_expression { handle_elif_open(PPD_ELIF_INDEX, $2); }
  522. ;
  523. elif_group: elif_group_open new_line group_part_seq_opt { handle_elif_close(PPD_ELIF_INDEX); }
  524. ;
  525. else_group_opt: /* empty */
  526. | else_group
  527. ;
  528. else_open: PPD_ELSE { handle_else_open(PPD_ELSE_INDEX); }
  529. ;
  530. else_group: else_open new_line group_part_seq_opt
  531. ;
  532. endif_open: PPD_ENDIF { handle_endif(PPD_ENDIF_INDEX); }
  533. ;
  534. endif_line: endif_open new_line
  535. ;
  536. control_line: PPD_INCLUDE preprocessing_token_seq new_line { handle_include(PPD_INCLUDE_INDEX); };
  537. | PPD_DEFINE mo_identifier string_literal_opt new_line { handle_macro_close (object_macro_index); }
  538. | PPD_DEFINE mf_identifier mf_args replacement_list new_line { handle_macro_close (function_macro_index); }
  539. | PPD_UNDEF mu_identifier new_line
  540. | PPD_LINE { handle_token_open (PPD_LINE_INDEX); } preprocessing_token_seq new_line { handle_token_close (PPD_LINE_INDEX); }
  541. | PPD_ERROR { handle_token_open (PPD_ERROR_INDEX); } preprocessing_token_seq_opt new_line { handle_token_close (PPD_ERROR_INDEX); }
  542. | PPD_PRAGMA { handle_token_open (PPD_PRAGMA_INDEX); } preprocessing_token_seq_opt new_line { handle_token_close (PPD_PRAGMA_INDEX); }
  543. | PPD_NULL new_line
  544. ;
  545. mf_args: BCS_PUNCT_OPEN_PARENTHESIS clean_identifier_list_opt BCS_PUNCT_CLOSE_PARENTHESIS
  546. ;
  547. replacement_list: { handle_replacement_open (replacement_list_index); } preprocessing_token_seq_opt { handle_replacement_close (replacement_list_index); }
  548. ;
  549. preprocessing_token_seq_opt: /* empty */
  550. | preprocessing_token_seq
  551. ;
  552. preprocessing_token_seq: preprocessing_token
  553. | preprocessing_token_seq preprocessing_token
  554. ;
  555. preprocessing_token: white_space
  556. | header_name
  557. | identifier
  558. | pp_number
  559. | character_literal
  560. | string_literal
  561. | preprocessing_op_or_punc
  562. | BCS_PUNCT_BACKSLASH { handle_token(BCS_PUNCT_BACKSLASH_INDEX); }
  563. ;
  564. header_name: SYSTEM_HEADER_STRING { handle_header_name(SYSTEM_HEADER_STRING_INDEX); }
  565. | HEADER_STRING { handle_header_name(HEADER_STRING_INDEX); }
  566. ;
  567. clean_identifier_list_opt: /* empty */
  568. | clean_identifier_list
  569. ;
  570. clean_identifier_list: identifier
  571. | clean_identifier_list BCS_PUNCT_COMMA identifier
  572. ;
  573. identifier: IDENTIFIER { handle_identifier(IDENTIFIER_INDEX); }
  574. | NON_REPLACEABLE_IDENTIFIER { handle_nonrepl_identifier(IDENTIFIER_INDEX); }
  575. | key_word
  576. ;
  577. pp_identifier: IDENTIFIER
  578. | NON_REPLACEABLE_IDENTIFIER
  579. key_word: kwd_abstract
  580. | kwd_abstract_interface
  581. | kwd_access
  582. | kwd_action
  583. | kwd_advance
  584. | kwd_allocatable
  585. | kwd_allocate
  586. | kwd_assign
  587. | kwd_asynchronous
  588. | kwd_backspace
  589. | kwd_bind
  590. | kwd_blank
  591. | kwd_block
  592. | kwd_block_data
  593. | kwd_call
  594. | kwd_case
  595. | kwd_character
  596. | kwd_class
  597. | kwd_class_default
  598. | kwd_class_is
  599. | kwd_close
  600. | kwd_common
  601. | kwd_complex
  602. | kwd_contains
  603. | kwd_contiguous
  604. | kwd_continue
  605. | kwd_cycle
  606. | kwd_data
  607. | kwd_deallocate
  608. | kwd_default
  609. | kwd_deferred
  610. | kwd_dimension
  611. | kwd_direct
  612. | kwd_do
  613. | kwd_double
  614. | kwd_double_complex
  615. | kwd_double_precision
  616. | kwd_elemental
  617. | kwd_else
  618. | kwd_else_if
  619. | kwd_else_where
  620. | kwd_end
  621. | kwd_end_associate
  622. | kwd_end_block
  623. | kwd_end_block_data
  624. | kwd_end_do
  625. | kwd_end_enum
  626. | kwd_end_file
  627. | kwd_end_forall
  628. | kwd_end_function
  629. | kwd_end_if
  630. | kwd_end_interface
  631. | kwd_end_module
  632. | kwd_end_procedure
  633. | kwd_end_program
  634. | kwd_end_select
  635. | kwd_end_submodule
  636. | kwd_end_subroutine
  637. | kwd_end_type
  638. | kwd_end_where
  639. | kwd_entry
  640. | kwd_eor
  641. | kwd_equivalence
  642. | kwd_err
  643. | kwd_errmsg
  644. | kwd_exist
  645. | kwd_exit
  646. | kwd_extends
  647. | kwd_extensible
  648. | kwd_external
  649. | kwd_false
  650. | kwd_file
  651. | kwd_final
  652. | kwd_flush
  653. | kwd_fmt
  654. | kwd_forall
  655. | kwd_form
  656. | kwd_format
  657. | kwd_formatted
  658. | kwd_function
  659. | kwd_generic
  660. | kwd_goto
  661. | kwd_if
  662. | kwd_implicit
  663. | kwd_implicit_none
  664. | kwd_import
  665. | kwd_impure
  666. | kwd_in
  667. | kwd_include
  668. | kwd_inquire
  669. | kwd_integer
  670. | kwd_intrinsic
  671. | kwd_in_out
  672. | kwd_intent
  673. | kwd_interface
  674. | kwd_iostat
  675. | kwd_iomsg
  676. | kwd_kind
  677. | kwd_let
  678. | kwd_logical
  679. | kwd_module
  680. | kwd_mold
  681. | kwd_name
  682. | kwd_named
  683. | kwd_namelist
  684. | kwd_nextrec
  685. | kwd_non_intrinsic
  686. | kwd_non_overridable
  687. | kwd_nonkind
  688. | kwd_none
  689. | kwd_nopass
  690. | kwd_nullify
  691. | kwd_number
  692. | kwd_open
  693. | kwd_opened
  694. | kwd_operator
  695. | kwd_optional
  696. | kwd_out
  697. | kwd_pad
  698. | kwd_parameter
  699. | kwd_pass
  700. | kwd_pause
  701. | kwd_pointer
  702. | kwd_position
  703. | kwd_precision
  704. | kwd_print
  705. | kwd_private
  706. | kwd_procedure
  707. | kwd_program
  708. | kwd_protected
  709. | kwd_public
  710. | kwd_pure
  711. | kwd_read
  712. | kwd_read_formatted
  713. | kwd_read_unformatted
  714. | kwd_real
  715. | kwd_rec
  716. | kwd_recl
  717. | kwd_return
  718. | kwd_rewind
  719. | kwd_round
  720. | kwd_save
  721. | kwd_select_case
  722. | kwd_select_type
  723. | kwd_sequence
  724. | kwd_sequential
  725. | kwd_sign
  726. | kwd_size
  727. | kwd_status
  728. | kwd_stop
  729. | kwd_source
  730. | kwd_subroutine
  731. | kwd_target
  732. | kwd_then
  733. | kwd_true
  734. | kwd_type
  735. | kwd_unformatted
  736. | kwd_unit
  737. | kwd_use
  738. | kwd_value
  739. | kwd_volatile
  740. | kwd_where
  741. | kwd_write
  742. | kwd_write_formatted
  743. | kwd_write_unformatted
  744. ;
  745. white_space_opt: /* empty */
  746. | white_space
  747. ;
  748. white_space: WHITE_SPACE { handle_string_token(WHITE_SPACE_INDEX); }
  749. ;
  750. pp_number: PP_NUMBER { handle_pp_number(); }
  751. | integer_literal
  752. | floating_literal
  753. ;
  754. integer_literal: INTEGER_LITERAL { handle_string_token(INTEGER_LITERAL_INDEX); }
  755. | octal_literal
  756. | decimal_literal
  757. | hexadecimal_literal
  758. ;
  759. octal_literal: OCTAL_LITERAL { handle_string_token(OCTAL_LITERAL_INDEX); }
  760. ;
  761. decimal_literal: DECIMAL_LITERAL { handle_string_token(DECIMAL_LITERAL_INDEX); }
  762. ;
  763. hexadecimal_literal: HEXADECIMAL_LITERAL { handle_string_token(HEXADECIMAL_LITERAL_INDEX); }
  764. ;
  765. pp_integer_literal: INTEGER_LITERAL { $$ = $1; }
  766. | pp_octal_literal { $$ = $1; }
  767. | pp_decimal_literal { $$ = $1; }
  768. | pp_hexadecimal_literal { $$ = $1; }
  769. ;
  770. pp_octal_literal: OCTAL_LITERAL { $$ = $1; }
  771. ;
  772. pp_decimal_literal: DECIMAL_LITERAL { $$ = $1; }
  773. ;
  774. pp_hexadecimal_literal: HEXADECIMAL_LITERAL { $$ = $1; }
  775. ;
  776. character_literal: CHARACTER_LITERAL { handle_string_token(CHARACTER_LITERAL_INDEX); }
  777. | L_CHARACTER_LITERAL { handle_string_token(L_CHARACTER_LITERAL_INDEX); }
  778. ;
  779. string_literal_opt: /* empty */
  780. | string_literal
  781. ;
  782. string_literal: STRING_LITERAL { handle_string_token(STRING_LITERAL_INDEX); }
  783. | L_STRING_LITERAL { handle_string_token(L_STRING_LITERAL_INDEX); }
  784. ;
  785. floating_literal: FLOATING_LITERAL { handle_string_token(FLOATING_LITERAL_INDEX); }
  786. ;
  787. pp_boolean_literal: KWD_FALSE { $$ = 0; }
  788. | KWD_TRUE { $$ = 1; }
  789. | BOOLEAN_LITERAL { $$ = $1; }
  790. ;
  791. preprocessing_op_or_punc: bcs_exclamation
  792. | bcs_hash
  793. | op_stringize
  794. | bcs_percent
  795. | bcs_ampersand
  796. | bcs_open_parenthesis
  797. | bcs_close_parenthesis
  798. | open_parenthesis_slash
  799. | close_parenthesis_slash
  800. | bcs_asterisk
  801. | bcs_plus
  802. | bcs_comma
  803. | bcs_minus
  804. | bcs_period
  805. | bcs_slash
  806. | bcs_colon
  807. | bcs_semicolon
  808. | bcs_less_than
  809. | bcs_equal
  810. | bcs_greater_than
  811. | bcs_question
  812. | bcs_open_bracket
  813. | bcs_caret
  814. | bcs_close_bracket
  815. | bcs_open_brace
  816. | bcs_vertical_bar
  817. | bcs_close_brace
  818. | bcs_tilde
  819. | ne
  820. | token_splice
  821. | assign_modulo
  822. | truth_and
  823. | assign_bit_and
  824. | assign_multiply
  825. | increment
  826. | assign_plus
  827. | decrement
  828. | assign_minus
  829. | pointer_member
  830. | pointer_ptm
  831. | object_ptm
  832. | assign_divide
  833. | dbl_colon
  834. | arrow
  835. | shift_left
  836. | assign_shift_left
  837. | le
  838. | eq
  839. | ge
  840. | shift_right
  841. | assign_shift_right
  842. | assign_bit_xor
  843. | assign_bit_or
  844. | truth_or
  845. | var_args
  846. | alt_bit_and
  847. | alt_bit_or
  848. | alt_bit_not
  849. | alt_truth_not
  850. | alt_bit_xor
  851. ;
  852. pp_constant_expression: pp_expression {$$ = $1;}
  853. ;
  854. pp_expression: pp_conditional_expression {$$ = $1;}
  855. | pp_expression pp_comma_op pp_conditional_expression {$$ = $3;}
  856. ;
  857. pp_conditional_expression: pp_logical_or_expression {$$ = $1;}
  858. | pp_logical_or_expression pp_conditional_operator pp_expression pp_conditional_separator pp_conditional_expression {$$ = ($1) ? $3 : $5;}
  859. ;
  860. pp_logical_or_expression: pp_logical_and_expression {$$ = $1;}
  861. | pp_logical_or_expression pp_truth_or pp_logical_and_expression {$$ = $1 || $3;}
  862. ;
  863. pp_logical_and_expression: pp_inclusive_or_expression {$$ = $1;}
  864. | pp_logical_and_expression pp_truth_and pp_inclusive_or_expression {$$ = $1 && $3;}
  865. ;
  866. pp_inclusive_or_expression: pp_exclusive_or_expression {$$ = $1;}
  867. | pp_inclusive_or_expression pp_bit_or pp_exclusive_or_expression {$$ = $1 | $3;}
  868. ;
  869. pp_exclusive_or_expression: pp_and_expression {$$ = $1;}
  870. | pp_exclusive_or_expression pp_bit_xor pp_and_expression {$$ = $1 ^ $3;}
  871. ;
  872. pp_and_expression: pp_equality_expression {$$ = $1;}
  873. | pp_and_expression pp_bit_and pp_equality_expression {$$ = $1 & $3;}
  874. ;
  875. pp_equality_expression: pp_relational_expression {$$ = $1;}
  876. | pp_equality_expression pp_eq pp_relational_expression {$$ = ($1 == $3);}
  877. | pp_equality_expression pp_ne pp_relational_expression {$$ = ($1 != $3);}
  878. ;
  879. pp_relational_expression: pp_shift_expression {$$ = $1;}
  880. | pp_relational_expression pp_lt pp_shift_expression {$$ = ($1 < $3);}
  881. | pp_relational_expression pp_gt pp_shift_expression {$$ = ($1 > $3);}
  882. | pp_relational_expression pp_le pp_shift_expression {$$ = ($1 <= $3);}
  883. | pp_relational_expression pp_ge pp_shift_expression {$$ = ($1 >= $3);}
  884. ;
  885. pp_shift_expression: pp_additive_expression {$$ = $1;}
  886. | pp_shift_expression pp_shift_left pp_additive_expression {$$ = ($1 << $3);}
  887. | pp_shift_expression pp_shift_right pp_additive_expression {$$ = ($1 >> $3);}
  888. ;
  889. pp_additive_expression: pp_multiplicative_expression {$$ = $1;}
  890. | pp_additive_expression pp_plus pp_multiplicative_expression {$$ = ($1 + $3);}
  891. | pp_additive_expression pp_minus pp_multiplicative_expression {$$ = ($1 - $3);}
  892. ;
  893. pp_multiplicative_expression: pp_unary_expression {$$ = $1;}
  894. | pp_multiplicative_expression pp_multiply pp_unary_expression {$$ = ($1 * $3);}
  895. | pp_multiplicative_expression pp_divide pp_unary_expression {$$ = ($1 / $3);}
  896. | pp_multiplicative_expression pp_modulo pp_unary_expression {$$ = ($1 % $3);}
  897. ;
  898. pp_unary_expression: pp_primary_expression {$$ = $1;}
  899. | pp_unary_plus pp_unary_expression {$$ = $2;}
  900. | pp_unary_minus pp_unary_expression {$$ = -$2;}
  901. | pp_truth_not pp_unary_expression {$$ = !$2;}
  902. | pp_bit_not pp_unary_expression {$$ = ~$2;}
  903. ;
  904. pp_primary_expression: pp_boolean_literal {$$ = $1;}
  905. | pp_integer_literal {$$ = $1;}
  906. | BCS_PUNCT_OPEN_PARENTHESIS pp_expression BCS_PUNCT_CLOSE_PARENTHESIS {$$ = $2;}
  907. | pp_identifier {$$ = 0;}
  908. ;
  909. kwd_abstract: KWD_ABSTRACT { handle_token(KWD_ABSTRACT_INDEX); }
  910. ;
  911. kwd_abstract_interface:KWD_ABSTRACT_INTERFACE { handle_token(KWD_ABSTRACT_INTERFACE_INDEX); }
  912. ;
  913. kwd_access: KWD_ACCESS { handle_token(KWD_ACCESS_INDEX); }
  914. ;
  915. kwd_action: KWD_ACTION { handle_token(KWD_ACTION_INDEX); }
  916. ;
  917. kwd_advance: KWD_ADVANCE { handle_token(KWD_ADVANCE_INDEX); }
  918. ;
  919. kwd_allocatable: KWD_ALLOCATABLE { handle_token(KWD_ALLOCATABLE_INDEX); }
  920. ;
  921. kwd_allocate: KWD_ALLOCATE { handle_token(KWD_ALLOCATE_INDEX); }
  922. ;
  923. kwd_assign: KWD_ASSIGN { handle_token(KWD_ASSIGN_INDEX); }
  924. ;
  925. kwd_asynchronous: KWD_ASYNCHRONOUS { handle_token(KWD_ASYNCHRONOUS_INDEX); }
  926. ;
  927. kwd_backspace: KWD_BACKSPACE { handle_token(KWD_BACKSPACE_INDEX); }
  928. ;
  929. kwd_bind: KWD_BIND { handle_token(KWD_BIND_INDEX); }
  930. ;
  931. kwd_blank: KWD_BLANK { handle_token(KWD_BLANK_INDEX); }
  932. ;
  933. kwd_block: KWD_BLOCK { handle_token(KWD_BLOCK_INDEX); }
  934. ;
  935. kwd_block_data: KWD_BLOCK_DATA { handle_token(KWD_BLOCK_DATA_INDEX); }
  936. ;
  937. kwd_call: KWD_CALL { handle_token(KWD_CALL_INDEX); }
  938. ;
  939. kwd_case: KWD_CASE { handle_token(KWD_CASE_INDEX); }
  940. ;
  941. kwd_character: KWD_CHARACTER { handle_token(KWD_CHARACTER_INDEX); }
  942. ;
  943. kwd_class: KWD_CLASS { handle_token(KWD_CLASS_INDEX); }
  944. ;
  945. kwd_class_default: KWD_CLASS_DEFAULT { handle_token(KWD_CLASS_DEFAULT_INDEX); }
  946. ;
  947. kwd_class_is: KWD_CLASS_IS { handle_token(KWD_CLASS_IS_INDEX); }
  948. ;
  949. kwd_close: KWD_CLOSE { handle_token(KWD_CLOSE_INDEX); }
  950. ;
  951. kwd_common: KWD_COMMON { handle_token(KWD_COMMON_INDEX); }
  952. ;
  953. kwd_complex: KWD_COMPLEX { handle_token(KWD_COMPLEX_INDEX); }
  954. ;
  955. kwd_contains: KWD_CONTAINS { handle_token(KWD_CONTAINS_INDEX); }
  956. ;
  957. kwd_contiguous: KWD_CONTIGUOUS { handle_token(KWD_CONTIGUOUS_INDEX); }
  958. ;
  959. kwd_continue: KWD_CONTINUE { handle_token(KWD_CONTINUE_INDEX); }
  960. ;
  961. kwd_cycle: KWD_CYCLE { handle_token(KWD_CYCLE_INDEX); }
  962. ;
  963. kwd_data: KWD_DATA { handle_token(KWD_DATA_INDEX); }
  964. ;
  965. kwd_deallocate: KWD_DEALLOCATE { handle_token(KWD_DEALLOCATE_INDEX); }
  966. ;
  967. kwd_default: KWD_DEFAULT { handle_token(KWD_DEFAULT_INDEX); }
  968. ;
  969. kwd_deferred: KWD_DEFERRED { handle_token(KWD_DEFERRED_INDEX); }
  970. ;
  971. kwd_dimension: KWD_DIMENSION { handle_token(KWD_DIMENSION_INDEX); }
  972. ;
  973. kwd_direct: KWD_DIRECT { handle_token(KWD_DIRECT_INDEX); }
  974. ;
  975. kwd_do: KWD_DO { handle_token(KWD_DO_INDEX); }
  976. ;
  977. kwd_double: KWD_DOUBLE { handle_token(KWD_DOUBLE_INDEX); }
  978. ;
  979. kwd_double_complex: KWD_DOUBLE_COMPLEX { handle_token(KWD_DOUBLE_COMPLEX_INDEX); }
  980. ;
  981. kwd_double_precision: KWD_DOUBLE_PRECISION { handle_token(KWD_DOUBLE_PRECISION_INDEX); }
  982. ;
  983. kwd_elemental: KWD_ELEMENTAL { handle_token(KWD_ELEMENTAL_INDEX); }
  984. ;
  985. kwd_else: KWD_ELSE { handle_token(KWD_ELSE_INDEX); }
  986. ;
  987. kwd_else_if: KWD_ELSE_IF { handle_token(KWD_ELSE_IF_INDEX); }
  988. ;
  989. kwd_else_where: KWD_ELSE_WHERE { handle_token(KWD_ELSE_WHERE_INDEX); }
  990. ;
  991. kwd_end: KWD_END { handle_token(KWD_END_INDEX); }
  992. ;
  993. kwd_end_associate: KWD_END_ASSOCIATE { handle_token(KWD_END_ASSOCIATE_INDEX); }
  994. ;
  995. kwd_end_block: KWD_END_BLOCK { handle_token(KWD_END_BLOCK_INDEX); }
  996. ;
  997. kwd_end_block_data: KWD_END_BLOCK_DATA { handle_token(KWD_END_BLOCK_DATA_INDEX); }
  998. ;
  999. kwd_end_do: KWD_END_DO { handle_token(KWD_END_DO_INDEX); }
  1000. ;
  1001. kwd_end_enum: KWD_END_ENUM { handle_token(KWD_END_ENUM_INDEX); }
  1002. ;
  1003. kwd_end_file: KWD_END_FILE { handle_token(KWD_END_FILE_INDEX); }
  1004. ;
  1005. kwd_end_forall: KWD_END_FORALL { handle_token(KWD_END_FORALL_INDEX); }
  1006. ;
  1007. kwd_end_function: KWD_END_FUNCTION { handle_token(KWD_END_FUNCTION_INDEX); }
  1008. ;
  1009. kwd_end_if: KWD_END_IF { handle_token(KWD_END_IF_INDEX); }
  1010. ;
  1011. kwd_end_interface: KWD_END_INTERFACE { handle_token(KWD_END_INTERFACE_INDEX); }
  1012. ;
  1013. kwd_end_module: KWD_END_MODULE { handle_token(KWD_END_MODULE_INDEX); }
  1014. ;
  1015. kwd_end_procedure: KWD_END_PROCEDURE { handle_token(KWD_END_PROCEDURE_INDEX); }
  1016. ;
  1017. kwd_end_program: KWD_END_PROGRAM { handle_token(KWD_END_PROGRAM_INDEX); }
  1018. ;
  1019. kwd_end_select: KWD_END_SELECT { handle_token(KWD_END_SELECT_INDEX); }
  1020. ;
  1021. kwd_end_submodule: KWD_END_SUBMODULE { handle_token(KWD_END_SUBMODULE_INDEX); }
  1022. ;
  1023. kwd_end_subroutine: KWD_END_SUBROUTINE { handle_token(KWD_END_SUBROUTINE_INDEX); }
  1024. ;
  1025. kwd_end_type: KWD_END_TYPE { handle_token(KWD_END_TYPE_INDEX); }
  1026. ;
  1027. kwd_end_where: KWD_END_WHERE { handle_token(KWD_END_WHERE_INDEX); }
  1028. ;
  1029. kwd_entry: KWD_ENTRY { handle_token(KWD_ENTRY_INDEX); }
  1030. ;
  1031. kwd_eor: KWD_EOR { handle_token(KWD_EOR_INDEX); }
  1032. ;
  1033. kwd_equivalence: KWD_EQUIVALENCE { handle_token(KWD_EQUIVALENCE_INDEX); }
  1034. ;
  1035. kwd_err: KWD_ERR { handle_token(KWD_ERR_INDEX); }
  1036. ;
  1037. kwd_errmsg: KWD_ERRMSG { handle_token(KWD_ERRMSG_INDEX); }
  1038. ;
  1039. kwd_exist: KWD_EXIST { handle_token(KWD_EXIST_INDEX); }
  1040. ;
  1041. kwd_exit: KWD_EXIT { handle_token(KWD_EXIT_INDEX); }
  1042. ;
  1043. kwd_extends: KWD_EXTENDS { handle_token(KWD_EXTENDS_INDEX); }
  1044. ;
  1045. kwd_extensible: KWD_EXTENSIBLE { handle_token(KWD_EXTENSIBLE_INDEX); }
  1046. ;
  1047. kwd_external: KWD_EXTERNAL { handle_token(KWD_EXTERNAL_INDEX); }
  1048. ;
  1049. kwd_false: KWD_FALSE { handle_token(KWD_FALSE_INDEX); }
  1050. ;
  1051. kwd_file: KWD_FILE { handle_token(KWD_FILE_INDEX); }
  1052. ;
  1053. kwd_final: KWD_FINAL { handle_token(KWD_FINAL_INDEX); }
  1054. ;
  1055. kwd_flush: KWD_FLUSH { handle_token(KWD_FLUSH_INDEX); }
  1056. ;
  1057. kwd_fmt: KWD_FMT { handle_token(KWD_FMT_INDEX); }
  1058. ;
  1059. kwd_forall: KWD_FORALL { handle_token(KWD_FORALL_INDEX); }
  1060. ;
  1061. kwd_form: KWD_FORM { handle_token(KWD_FORM_INDEX); }
  1062. ;
  1063. kwd_format: KWD_FORMAT { handle_token(KWD_FORMAT_INDEX); }
  1064. ;
  1065. kwd_formatted: KWD_FORMATTED { handle_token(KWD_FORMATTED_INDEX); }
  1066. ;
  1067. kwd_function: KWD_FUNCTION { handle_token(KWD_FUNCTION_INDEX); }
  1068. ;
  1069. kwd_generic: KWD_GENERIC { handle_token(KWD_GENERIC_INDEX); }
  1070. ;
  1071. kwd_goto: KWD_GOTO { handle_token(KWD_GOTO_INDEX); }
  1072. ;
  1073. kwd_if: KWD_IF { handle_token(KWD_IF_INDEX); }
  1074. ;
  1075. kwd_implicit: KWD_IMPLICIT { handle_token(KWD_IMPLICIT_INDEX); }
  1076. ;
  1077. kwd_implicit_none: KWD_IMPLICIT_NONE { handle_token(KWD_IMPLICIT_NONE_INDEX); }
  1078. ;
  1079. kwd_import: KWD_IMPORT { handle_token(KWD_IMPORT_INDEX); }
  1080. ;
  1081. kwd_impure: KWD_IMPURE { handle_token(KWD_IMPURE_INDEX); }
  1082. ;
  1083. kwd_in: KWD_IN { handle_token(KWD_IN_INDEX); }
  1084. ;
  1085. kwd_in_out: KWD_IN_OUT { handle_token(KWD_IN_OUT_INDEX); }
  1086. ;
  1087. kwd_include: KWD_INCLUDE { handle_token(KWD_INCLUDE_INDEX); }
  1088. ;
  1089. kwd_inquire: KWD_INQUIRE { handle_token(KWD_INQUIRE_INDEX); }
  1090. ;
  1091. kwd_integer: KWD_INTEGER { handle_token(KWD_INTEGER_INDEX); }
  1092. ;
  1093. kwd_intent: KWD_INTENT { handle_token(KWD_INTENT_INDEX); }
  1094. ;
  1095. kwd_interface: KWD_INTERFACE { handle_token(KWD_INTERFACE_INDEX); }
  1096. ;
  1097. kwd_intrinsic: KWD_INTRINSIC { handle_token(KWD_INTRINSIC_INDEX); }
  1098. ;
  1099. kwd_iostat: KWD_IOSTAT { handle_token(KWD_IOSTAT_INDEX); }
  1100. ;
  1101. kwd_iomsg: KWD_IOMSG { handle_token(KWD_IOMSG_INDEX); }
  1102. ;
  1103. kwd_kind: KWD_KIND { handle_token(KWD_KIND_INDEX); }
  1104. ;
  1105. kwd_let: KWD_LET { handle_token(KWD_LET_INDEX); }
  1106. ;
  1107. kwd_logical: KWD_LOGICAL { handle_token(KWD_LOGICAL_INDEX); }
  1108. ;
  1109. kwd_module: KWD_MODULE { handle_token(KWD_MODULE_INDEX); }
  1110. ;
  1111. kwd_mold: KWD_MOLD { handle_token(KWD_MOLD_INDEX); }
  1112. ;
  1113. kwd_name: KWD_NAME { handle_token(KWD_NAME_INDEX); }
  1114. ;
  1115. kwd_named: KWD_NAMED { handle_token(KWD_NAMED_INDEX); }
  1116. ;
  1117. kwd_namelist: KWD_NAMELIST { handle_token(KWD_NAMELIST_INDEX); }
  1118. ;
  1119. kwd_nextrec: KWD_NEXTREC { handle_token(KWD_NEXTREC_INDEX); }
  1120. ;
  1121. kwd_non_intrinsic: KWD_NON_INTRINSIC { handle_token(KWD_NON_INTRINSIC_INDEX); }
  1122. ;
  1123. kwd_non_overridable: KWD_NON_OVERRIDABLE { handle_token(KWD_NON_OVERRIDABLE_INDEX); }
  1124. ;
  1125. kwd_nonkind: KWD_NONKIND { handle_token(KWD_NONKIND_INDEX); }
  1126. ;
  1127. kwd_none: KWD_NONE { handle_token(KWD_NONE_INDEX); }
  1128. ;
  1129. kwd_nopass: KWD_NOPASS { handle_token(KWD_NOPASS_INDEX); }
  1130. ;
  1131. kwd_nullify: KWD_NULLIFY { handle_token(KWD_NULLIFY_INDEX); }
  1132. ;
  1133. kwd_number: KWD_NUMBER { handle_token(KWD_NUMBER_INDEX); }
  1134. ;
  1135. kwd_open: KWD_OPEN { handle_token(KWD_OPEN_INDEX); }
  1136. ;
  1137. kwd_opened: KWD_OPENED { handle_token(KWD_OPENED_INDEX); }
  1138. ;
  1139. kwd_operator: KWD_OPERATOR { handle_token(KWD_OPERATOR_INDEX); }
  1140. ;
  1141. kwd_optional: KWD_OPTIONAL { handle_token(KWD_OPTIONAL_INDEX); }
  1142. ;
  1143. kwd_out: KWD_OUT { handle_token(KWD_OUT_INDEX); }
  1144. ;
  1145. kwd_pad: KWD_PAD { handle_token(KWD_PAD_INDEX); }
  1146. ;
  1147. kwd_parameter: KWD_PARAMETER { handle_token(KWD_PARAMETER_INDEX); }
  1148. ;
  1149. kwd_pass: KWD_PASS { handle_token(KWD_PASS_INDEX); }
  1150. ;
  1151. kwd_pause: KWD_PAUSE { handle_token(KWD_PAUSE_INDEX); }
  1152. ;
  1153. kwd_pointer: KWD_POINTER { handle_token(KWD_POINTER_INDEX); }
  1154. ;
  1155. kwd_position: KWD_POSITION { handle_token(KWD_POSITION_INDEX); }
  1156. ;
  1157. kwd_precision: KWD_PRECISION { handle_token(KWD_PRECISION_INDEX); }
  1158. ;
  1159. kwd_print: KWD_PRINT { handle_token(KWD_PRINT_INDEX); }
  1160. ;
  1161. kwd_private: KWD_PRIVATE { handle_token(KWD_PRIVATE_INDEX); }
  1162. ;
  1163. kwd_procedure: KWD_PROCEDURE { handle_token(KWD_PROCEDURE_INDEX); }
  1164. ;
  1165. kwd_program: KWD_PROGRAM { handle_token(KWD_PROGRAM_INDEX); }
  1166. ;
  1167. kwd_protected: KWD_PROTECTED { handle_token(KWD_PROTECTED_INDEX); }
  1168. ;
  1169. kwd_public: KWD_PUBLIC { handle_token(KWD_PUBLIC_INDEX); }
  1170. ;
  1171. kwd_pure: KWD_PURE { handle_token(KWD_PURE_INDEX); }
  1172. ;
  1173. kwd_read: KWD_READ { handle_token(KWD_READ_INDEX); }
  1174. ;
  1175. kwd_read_formatted: KWD_READ_FORMATTED { handle_token(KWD_READ_FORMATTED_INDEX); }
  1176. ;
  1177. kwd_read_unformatted: KWD_READ_UNFORMATTED { handle_token(KWD_READ_UNFORMATTED_INDEX); }
  1178. ;
  1179. kwd_real: KWD_REAL { handle_token(KWD_REAL_INDEX); }
  1180. ;
  1181. kwd_rec: KWD_REC { handle_token(KWD_REC_INDEX); }
  1182. ;
  1183. kwd_recl: KWD_RECL { handle_token(KWD_RECL_INDEX); }
  1184. ;
  1185. kwd_return: KWD_RETURN { handle_token(KWD_RETURN_INDEX); }
  1186. ;
  1187. kwd_rewind: KWD_REWIND { handle_token(KWD_REWIND_INDEX); }
  1188. ;
  1189. kwd_round: KWD_ROUND { handle_token(KWD_ROUND_INDEX); }
  1190. ;
  1191. kwd_save: KWD_SAVE { handle_token(KWD_SAVE_INDEX); }
  1192. ;
  1193. kwd_select_case: KWD_SELECT_CASE { handle_token(KWD_SELECT_CASE_INDEX); }
  1194. ;
  1195. kwd_select_type: KWD_SELECT_TYPE { handle_token(KWD_SELECT_TYPE_INDEX); }
  1196. ;
  1197. kwd_sequence: KWD_SEQUENCE { handle_token(KWD_SEQUENCE_INDEX); }
  1198. ;
  1199. kwd_sequential: KWD_SEQUENTIAL { handle_token(KWD_SEQUENTIAL_INDEX); }
  1200. ;
  1201. kwd_sign: KWD_SIGN { handle_token(KWD_SIGN_INDEX); }
  1202. ;
  1203. kwd_size: KWD_SIZE { handle_token(KWD_SIZE_INDEX); }
  1204. ;
  1205. kwd_source: KWD_SOURCE { handle_token(KWD_SOURCE_INDEX); }
  1206. ;
  1207. kwd_status: KWD_STATUS { handle_token(KWD_STATUS_INDEX); }
  1208. ;
  1209. kwd_stop: KWD_STOP { handle_token(KWD_STOP_INDEX); }
  1210. ;
  1211. kwd_subroutine: KWD_SUBROUTINE { handle_token(KWD_SUBROUTINE_INDEX); }
  1212. ;
  1213. kwd_target: KWD_TARGET { handle_token(KWD_TARGET_INDEX); }
  1214. ;
  1215. kwd_then: KWD_THEN { handle_token(KWD_THEN_INDEX); }
  1216. ;
  1217. kwd_true: KWD_TRUE { handle_token(KWD_TRUE_INDEX); }
  1218. ;
  1219. kwd_type: KWD_TYPE { handle_token(KWD_TYPE_INDEX); }
  1220. ;
  1221. kwd_unformatted: KWD_UNFORMATTED { handle_token(KWD_UNFORMATTED_INDEX); }
  1222. ;
  1223. kwd_unit: KWD_UNIT { handle_token(KWD_UNIT_INDEX); }
  1224. ;
  1225. kwd_use: KWD_USE { handle_token(KWD_USE_INDEX); }
  1226. ;
  1227. kwd_value: KWD_VALUE { handle_token(KWD_VALUE_INDEX); }
  1228. ;
  1229. kwd_volatile: KWD_VOLATILE { handle_token(KWD_VOLATILE_INDEX); }
  1230. ;
  1231. kwd_where: KWD_WHERE { handle_token(KWD_WHERE_INDEX); }
  1232. ;
  1233. kwd_write: KWD_WRITE { handle_token(KWD_WRITE_INDEX); }
  1234. ;
  1235. kwd_write_formatted: KWD_WRITE_FORMATTED { handle_token(KWD_WRITE_FORMATTED_INDEX); }
  1236. ;
  1237. kwd_write_unformatted: KWD_WRITE_UNFORMATTED { handle_token(KWD_WRITE_UNFORMATTED_INDEX); }
  1238. ;
  1239. new_line: BCS_WHTSP_NEWLINE
  1240. ;
  1241. bcs_hash: BCS_PUNCT_HASH { handle_token(BCS_PUNCT_HASH_INDEX); }
  1242. | ALT_PUNCT_HASH { handle_token(ALT_PUNCT_HASH_INDEX); }
  1243. ;
  1244. op_stringize: OP_STRINGIZE { handle_token(OP_STRINGIZE_INDEX); }
  1245. ;
  1246. token_splice: OP_TOKEN_SPLICE { handle_token(OP_TOKEN_SPLICE_INDEX); }
  1247. | ALT_OP_TOKEN_SPLICE { handle_token(ALT_OP_TOKEN_SPLICE_INDEX); }
  1248. ;
  1249. mf_identifier: MACRO_FUNCTION_IDENTIFIER { handle_macro_open(function_macro_index /*MACRO_FUNCTION_IDENTIFIER_INDEX*/); }
  1250. | INV_MFI_LOGICAL_AND { handle_invalid_macro_id(OP_ALT_LOGICAL_AND_INDEX); }
  1251. | INV_MFI_ASSIGN_BIT_AND { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_AND_INDEX); }
  1252. | INV_MFI_BIT_AND { handle_invalid_macro_id(OP_ALT_BIT_AND_INDEX); }
  1253. | INV_MFI_BIT_OR { handle_invalid_macro_id(OP_ALT_BIT_OR_INDEX); }
  1254. | INV_MFI_BIT_NOT { handle_invalid_macro_id(OP_ALT_BIT_NOT_INDEX); }
  1255. | INV_MFI_LOGICAL_NOT { handle_invalid_macro_id(OP_ALT_LOGICAL_NOT_INDEX); }
  1256. | INV_MFI_NE { handle_invalid_macro_id(OP_ALT_NE_INDEX); }
  1257. | INV_MFI_LOGICAL_OR { handle_invalid_macro_id(OP_ALT_LOGICAL_OR_INDEX); }
  1258. | INV_MFI_ASSIGN_BIT_OR { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_OR_INDEX); }
  1259. | INV_MFI_BIT_PLUS { handle_invalid_macro_id(OP_ALT_BIT_PLUS_INDEX); }
  1260. | INV_MFI_ASSIGN_BIT_PLUS { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_PLUS_INDEX); }
  1261. ;
  1262. mo_identifier: MACRO_OBJECT_IDENTIFIER { handle_macro_open(object_macro_index/*MACRO_OBJECT_IDENTIFIER_INDEX*/); }
  1263. | invalid_macro_identifier
  1264. ;
  1265. mu_identifier: IDENTIFIER { handle_macro_undef(PPD_UNDEF_INDEX); }
  1266. | invalid_macro_identifier { pop(); }
  1267. ;
  1268. invalid_ifdef_identifier: invalid_macro_identifier
  1269. ;
  1270. invalid_ifndef_identifier: invalid_macro_identifier
  1271. ;
  1272. invalid_macro_identifier: INV_ALT_LOGICAL_AND { handle_invalid_macro_id(OP_ALT_LOGICAL_AND_INDEX); }
  1273. | INV_ALT_ASSIGN_BIT_AND { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_AND_INDEX); }
  1274. | INV_ALT_BIT_AND { handle_invalid_macro_id(OP_ALT_BIT_AND_INDEX); }
  1275. | INV_ALT_BIT_OR { handle_invalid_macro_id(OP_ALT_BIT_OR_INDEX); }
  1276. | INV_ALT_BIT_NOT { handle_invalid_macro_id(OP_ALT_BIT_NOT_INDEX); }
  1277. | INV_ALT_LOGICAL_NOT { handle_invalid_macro_id(OP_ALT_LOGICAL_NOT_INDEX); }
  1278. | INV_ALT_NE { handle_invalid_macro_id(OP_ALT_NE_INDEX); }
  1279. | INV_ALT_LOGICAL_OR { handle_invalid_macro_id(OP_ALT_LOGICAL_OR_INDEX); }
  1280. | INV_ALT_ASSIGN_BIT_OR { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_OR_INDEX); }
  1281. | INV_ALT_BIT_PLUS { handle_invalid_macro_id(OP_ALT_BIT_PLUS_INDEX); }
  1282. | INV_ALT_ASSIGN_BIT_PLUS { handle_invalid_macro_id(OP_ALT_ASSIGN_BIT_PLUS_INDEX); }
  1283. ;
  1284. bcs_exclamation: BCS_PUNCT_EXCLAMATION { handle_token(OP_LOGICAL_NOT_INDEX); }
  1285. ;
  1286. alt_truth_not: OP_ALT_LOGICAL_NOT { handle_token(OP_ALT_LOGICAL_NOT_INDEX); }
  1287. ;
  1288. pp_truth_not: BCS_PUNCT_EXCLAMATION
  1289. | OP_ALT_LOGICAL_NOT
  1290. ;
  1291. ne: OP_NE { handle_token(OP_NE_INDEX); }
  1292. | OP_ALT_NE { handle_token(OP_ALT_NE_INDEX); }
  1293. ;
  1294. pp_ne: OP_NE
  1295. | OP_ALT_NE
  1296. ;
  1297. bcs_percent: member
  1298. ;
  1299. member: BCS_PUNCT_PERCENT { handle_token(OP_MEMBER_INDEX); }
  1300. ;
  1301. pp_modulo: BCS_PUNCT_PERCENT
  1302. ;
  1303. assign_modulo: OP_ASSIGN_MODULO { handle_token(OP_ASSIGN_MODULO_INDEX); }
  1304. ;
  1305. bcs_ampersand: BCS_PUNCT_AMPERSAND { handle_token(BCS_PUNCT_AMPERSAND_INDEX); }
  1306. ;
  1307. alt_bit_and: OP_ALT_BIT_AND { handle_token(OP_ALT_BIT_AND_INDEX); }
  1308. ;
  1309. pp_bit_and: BCS_PUNCT_AMPERSAND
  1310. | OP_ALT_BIT_AND
  1311. ;
  1312. truth_and: OP_LOGICAL_AND { handle_token(OP_LOGICAL_AND_INDEX); }
  1313. | OP_ALT_LOGICAL_AND { handle_token(OP_ALT_LOGICAL_AND_INDEX); }
  1314. ;
  1315. pp_truth_and: OP_LOGICAL_AND
  1316. | OP_ALT_LOGICAL_AND
  1317. ;
  1318. assign_bit_and: OP_ASSIGN_BIT_AND { handle_token(OP_ASSIGN_BIT_AND_INDEX); }
  1319. | OP_ALT_ASSIGN_BIT_AND { handle_token(OP_ALT_ASSIGN_BIT_AND_INDEX); }
  1320. ;
  1321. bcs_open_parenthesis: BCS_PUNCT_OPEN_PARENTHESIS { handle_token_open(BCS_PUNCT_OPEN_PARENTHESIS_INDEX); }
  1322. ;
  1323. bcs_close_parenthesis: BCS_PUNCT_CLOSE_PARENTHESIS { handle_token_close(BCS_PUNCT_CLOSE_PARENTHESIS_INDEX); }
  1324. ;
  1325. open_parenthesis_slash: OPEN_PARENTHESIS_SLASH { handle_token_open(OPEN_PARENTHESIS_SLASH_INDEX); }
  1326. ;
  1327. close_parenthesis_slash: CLOSE_PARENTHESIS_SLASH { handle_token_close(CLOSE_PARENTHESIS_SLASH_INDEX); }
  1328. ;
  1329. bcs_asterisk: BCS_PUNCT_ASTERISK { handle_token(BCS_PUNCT_ASTERISK_INDEX); }
  1330. ;
  1331. pp_multiply: BCS_PUNCT_ASTERISK
  1332. ;
  1333. assign_multiply: OP_ASSIGN_MULTIPLY { handle_token(OP_ASSIGN_MULTIPLY_INDEX); }
  1334. ;
  1335. bcs_plus: BCS_PUNCT_PLUS { handle_token(BCS_PUNCT_PLUS_INDEX); }
  1336. ;
  1337. pp_plus: BCS_PUNCT_PLUS
  1338. ;
  1339. pp_unary_plus: BCS_PUNCT_PLUS
  1340. ;
  1341. increment: OP_INCREMENT { handle_token(OP_INCREMENT_INDEX); }
  1342. ;
  1343. assign_plus: OP_ASSIGN_PLUS { handle_token(OP_ASSIGN_PLUS_INDEX); }
  1344. ;
  1345. bcs_comma: BCS_PUNCT_COMMA { handle_token(BCS_PUNCT_COMMA_INDEX); }
  1346. ;
  1347. pp_comma_op: BCS_PUNCT_COMMA
  1348. ;
  1349. bcs_minus: BCS_PUNCT_MINUS { handle_token(BCS_PUNCT_MINUS_INDEX); }
  1350. ;
  1351. pp_minus: BCS_PUNCT_MINUS
  1352. ;
  1353. pp_unary_minus: BCS_PUNCT_MINUS
  1354. ;
  1355. decrement: OP_DECREMENT { handle_token(OP_DECREMENT_INDEX); }
  1356. ;
  1357. assign_minus: OP_ASSIGN_MINUS { handle_token(OP_ASSIGN_MINUS_INDEX); }
  1358. ;
  1359. pointer_member: OP_POINTER_MEMBER { handle_token(OP_POINTER_MEMBER_INDEX); }
  1360. ;
  1361. pointer_ptm: OP_POINTER_POINTER_TO_MEMBER { handle_token(OP_POINTER_POINTER_TO_MEMBER_INDEX); }
  1362. ;
  1363. bcs_period: BCS_PUNCT_PERIOD { handle_token(BCS_PUNCT_PERIOD_INDEX); }
  1364. ;
  1365. var_args: DECL_VAR_ARGS { handle_token(DECL_VAR_ARGS_INDEX); }
  1366. ;
  1367. object_ptm: OP_OBJECT_POINTER_TO_MEMBER { handle_token(OP_OBJECT_POINTER_TO_MEMBER_INDEX); }
  1368. ;
  1369. bcs_slash: divide
  1370. ;
  1371. divide: BCS_PUNCT_SLASH { handle_token(OP_DIVIDE_INDEX); }
  1372. ;
  1373. pp_divide: BCS_PUNCT_SLASH
  1374. ;
  1375. assign_divide: OP_ASSIGN_DIVIDE { handle_token(OP_ASSIGN_DIVIDE_INDEX); }
  1376. ;
  1377. bcs_colon: BCS_PUNCT_COLON { handle_token(BCS_PUNCT_COLON_INDEX); }
  1378. ;
  1379. pp_conditional_separator: BCS_PUNCT_COLON
  1380. ;
  1381. dbl_colon: PUNC_DBL_COLON { handle_token(PUNC_DBL_COLON_INDEX); }
  1382. ;
  1383. arrow: PUNC_ARROW { handle_token(PUNC_ARROW_INDEX); }
  1384. ;
  1385. bcs_semicolon: BCS_PUNCT_SEMICOLON { handle_token(BCS_PUNCT_SEMICOLON_INDEX); }
  1386. ;
  1387. bcs_less_than: BCS_PUNCT_LESS_THAN { handle_token(BCS_PUNCT_LESS_THAN_INDEX); }
  1388. ;
  1389. pp_lt: BCS_PUNCT_LESS_THAN
  1390. ;
  1391. shift_left: OP_SHIFT_LEFT { handle_token(OP_SHIFT_LEFT_INDEX); }
  1392. ;
  1393. pp_shift_left: OP_SHIFT_LEFT
  1394. ;
  1395. assign_shift_left: OP_ASSIGN_SHIFT_LEFT { handle_token(OP_ASSIGN_SHIFT_LEFT_INDEX); }
  1396. ;
  1397. le: OP_LE { handle_token(OP_LE_INDEX); }
  1398. ;
  1399. pp_le: OP_LE
  1400. ;
  1401. bcs_equal: BCS_PUNCT_EQUAL { handle_token(BCS_PUNCT_EQUAL_INDEX); }
  1402. ;
  1403. eq: OP_EQ { handle_token(OP_EQ_INDEX); }
  1404. ;
  1405. pp_eq: OP_EQ
  1406. ;
  1407. bcs_greater_than: BCS_PUNCT_GREATER_THAN { handle_token(BCS_PUNCT_GREATER_THAN_INDEX); }
  1408. ;
  1409. pp_gt: BCS_PUNCT_GREATER_THAN
  1410. ;
  1411. ge: OP_GE { handle_token(OP_GE_INDEX); }
  1412. ;
  1413. pp_ge: OP_GE
  1414. ;
  1415. shift_right: OP_SHIFT_RIGHT { handle_token(OP_SHIFT_RIGHT_INDEX); }
  1416. ;
  1417. pp_shift_right: OP_SHIFT_RIGHT { handle_token(OP_SHIFT_RIGHT_INDEX); }
  1418. ;
  1419. assign_shift_right: OP_ASSIGN_SHIFT_RIGHT { handle_token(OP_ASSIGN_SHIFT_RIGHT_INDEX); }
  1420. ;
  1421. bcs_question: conditional_operator
  1422. conditional_operator: OP_CONDITIONAL { handle_token(OP_CONDITIONAL_INDEX); }
  1423. ;
  1424. pp_conditional_operator: OP_CONDITIONAL
  1425. ;
  1426. bcs_open_bracket: BCS_PUNCT_OPEN_BRACKET { handle_token_open(BCS_PUNCT_OPEN_BRACKET_INDEX); }
  1427. | ALT_PUNCT_OPEN_BRACKET { handle_token_open(ALT_PUNCT_OPEN_BRACKET_INDEX); }
  1428. ;
  1429. bcs_close_bracket: BCS_PUNCT_CLOSE_BRACKET { handle_token_close(BCS_PUNCT_CLOSE_BRACKET_INDEX); }
  1430. | ALT_PUNCT_CLOSE_BRACKET { handle_token_close(ALT_PUNCT_CLOSE_BRACKET_INDEX); }
  1431. ;
  1432. bcs_caret: BCS_PUNCT_CARET { handle_token(OP_BIT_PLUS_INDEX); }
  1433. ;
  1434. alt_bit_xor: OP_ALT_BIT_PLUS { handle_token(OP_ALT_BIT_PLUS_INDEX); }
  1435. ;
  1436. pp_bit_xor: BCS_PUNCT_CARET
  1437. | OP_ALT_BIT_PLUS
  1438. ;
  1439. assign_bit_xor: OP_ASSIGN_BIT_PLUS { handle_token(OP_ASSIGN_BIT_PLUS_INDEX); }
  1440. | OP_ALT_ASSIGN_BIT_PLUS { handle_token(OP_ALT_ASSIGN_BIT_PLUS_INDEX); }
  1441. ;
  1442. bcs_open_brace: BCS_PUNCT_OPEN_BRACE { handle_token_open(BCS_PUNCT_OPEN_BRACE_INDEX); }
  1443. | ALT_PUNCT_OPEN_BRACE { handle_token_open(ALT_PUNCT_OPEN_BRACE_INDEX); }
  1444. ;
  1445. bcs_close_brace: BCS_PUNCT_CLOSE_BRACE { handle_token_close(BCS_PUNCT_CLOSE_BRACE_INDEX); }
  1446. | ALT_PUNCT_CLOSE_BRACE { handle_token_close(ALT_PUNCT_CLOSE_BRACE_INDEX); }
  1447. ;
  1448. bcs_vertical_bar: BCS_PUNCT_VERTICAL_BAR { handle_token(OP_BIT_OR_INDEX); }
  1449. ;
  1450. alt_bit_or: OP_ALT_BIT_OR { handle_token(OP_BIT_OR_INDEX); }
  1451. ;
  1452. pp_bit_or: BCS_PUNCT_VERTICAL_BAR
  1453. | OP_ALT_BIT_OR
  1454. ;
  1455. assign_bit_or: OP_ASSIGN_BIT_OR { handle_token(OP_ASSIGN_BIT_OR_INDEX); }
  1456. | OP_ALT_ASSIGN_BIT_OR { handle_token(OP_ALT_ASSIGN_BIT_OR_INDEX); }
  1457. ;
  1458. truth_or: OP_LOGICAL_OR { handle_token(OP_LOGICAL_OR_INDEX); }
  1459. | OP_ALT_LOGICAL_OR { handle_token(OP_ALT_LOGICAL_OR_INDEX); }
  1460. ;
  1461. pp_truth_or: OP_LOGICAL_OR
  1462. | OP_ALT_LOGICAL_OR
  1463. ;
  1464. bcs_tilde: BCS_PUNCT_TILDE { handle_token(OP_BIT_NOT_INDEX); }
  1465. ;
  1466. alt_bit_not: OP_ALT_BIT_NOT { handle_token(OP_ALT_BIT_NOT_INDEX); }
  1467. ;
  1468. pp_bit_not: BCS_PUNCT_TILDE
  1469. | OP_ALT_BIT_NOT
  1470. ;
  1471. %%
  1472. const char *get_yytname(int token) {
  1473. return yytname[yytranslate[token]];
  1474. }
  1475. void yyerror(char const *s) {
  1476. extern int error_count;
  1477. extern int yychar;
  1478. fprintf(stderr, "%s\n", s);
  1479. if (yychar > 126) {
  1480. fprintf(stderr, "File %s; line %d: yychar = %s(%d)\n",getCurrentFilename(), getCurrentLineNumber(), get_yytname(yychar), yychar);
  1481. } else {
  1482. fprintf(stderr, "File %s; line %d: yychar = %c\n",getCurrentFilename(),getCurrentLineNumber(), yychar);
  1483. }
  1484. error_count++;
  1485. }