File Coverage

lib/RPerl/Grammar.eyp
Criterion Covered Total %
statement 501 510 98.2
branch n/a
condition n/a
subroutine 31 31 100.0
pod n/a
total 532 541 98.3


line stmt bran cond sub pod time code
1             # DEV NOTE: DO NOT RUN PERLTIDY ON THIS FILE! this is EYAPP syntax, not pure Perl syntax
2              
3             # [[[ EYAPP SETUP & CONFIG ]]]
4              
5             %{
6             # [[[ HEADER ]]]
7 4     4   32959 use strict;
  4         16  
  4         143  
8 4     4   28 use warnings;
  4         12  
  4         213  
9             our $VERSION = 0.006_100;
10              
11 4     4   476 use Carp;
  4         13  
  4         270  
12 4     4   1622 use rperlrules; # affirmative, it totally does
  332         18384  
  12         78811  
13             %}
14              
15             %strict # require all tokens to be declared, etc.
16             %tree # automatically create AST
17              
18             # [[[ LEXICON TOKENS, WHITESPACE ]]]
19              
20             %whites /((?:\s*(?:[#][^#!].*)?\s*)*|\s)/ # actual whitespace, or one or more normal comments; neither shebang '#!', nor double-hash critics '##'
21              
22             # [[[ SEMANTIC ACTION, ABSTRACT SYNTAX TREE NODE CONSTRUCTOR ]]]
23              
24             %defaultaction {
25 374     54   60756 my $self = shift;
  2236         126939  
  2155         67519  
  190         10164  
  980         53680  
  2982         250010  
  478         19665  
  109         6949  
  591         64817  
  3023         192650  
  384         12153  
  462         27624  
  98         5470  
  245         12881  
  6020         307954  
  24         2196  
  94         7111  
  1327         68317  
  2638         161832  
  80         4670  
  152         5344  
  63         5298  
  149         8748  
  292         14365  
  1130         66446  
  3632         187976  
  4235         216284  
  64         3729  
  2033         60537  
  477         26416  
  30         1534  
  141         10213  
  432         21910  
  337         17494  
  1289         66955  
  2000         127787  
  1686         83787  
  195         11995  
  27         1421  
  4         339  
  121         7761  
  58         1942  
  241         16347  
  732         59810  
  2112         78796  
  1260         70300  
  119         6774  
  50         3156  
  215         15091  
  214         29714  
  599         32471  
  31         1707  
  92         7404  
  85         4486  
  90         4646  
  732         38340  
  851         73745  
  682         41597  
  355         28199  
  66         3081  
  70         4404  
  46         3030  
  104         4228  
  287         16891  
  16         923  
  7         369  
  1427         81675  
  36         2571  
  573         47952  
  537         33335  
  85         4431  
  257         16152  
  437         30415  
  1826         103531  
  0         0  
  98         4449  
  9         508  
  8         578  
  861         51122  
  9         516  
  85         5816  
  562         30154  
  372         21272  
  469         32830  
  0         0  
  184         5773  
  522         28552  
  67         3498  
  916         48157  
  29         1834  
  641         44211  
  92         5576  
  271         33736  
  20         1322  
  1048         60891  
  8         448  
  491         36413  
  48         2337  
  52         2907  
  22         1540  
  1542         91886  
  87         7558  
  10         511  
  11         734  
  2         123  
  4138         133223  
  121         7508  
  2115         196801  
  22         843  
  13         1132  
  47         1648  
  136         4184  
  2990         154984  
  163         8934  
  101         5663  
  524         74816  
  1135         57196  
  3         131  
  23         1374  
  14         1148  
  35         2757  
  619         20636  
  83         3529  
  6         370  
  26         1708  
  126         7006  
  2216         171791  
  4117         213061  
  2259         115525  
  3         190  
  9         695  
  298         16351  
  0         0  
  1162         67721  
  23         1623  
  426         20295  
  2012         189668  
  302         24553  
  223         16642  
  70         3881  
  4         216  
  155         9668  
  41         2149  
  767         43914  
  62         3164  
  2         58  
  567         33715  
  23         828  
  15         881  
  2380         89018  
  4725         149125  
  1246         104482  
  392         51297  
  373         20505  
  693         41716  
  243         12873  
  18         924  
  106         6012  
  516         73220  
  153         11060  
  328         10445  
  1224         66099  
  525         26462  
  57         2465  
  40         2264  
  11         877  
26 56         379 my $name = $self->YYName();
  1148         64109  
  1050         4407  
  1190         89256  
  7         292  
  2668         11750  
  215         1061  
  369         21434  
  386         3500  
  2788         157653  
  487         26828  
  462         9866  
  117         5785  
  156         1436  
  5986         18307  
  67         2809  
  264         11028  
  1327         10506  
  2638         15863  
  30         281  
  71         2524  
  63         9224  
  149         6852  
  292         2597  
  1245         20526  
  4975         262325  
  718         33962  
  110         1969  
  1655         53325  
  21         437  
  30         167  
  141         560  
  432         1937  
  337         1186  
  1289         3814  
  2000         7754  
  1686         6361  
  195         764  
  27         92  
  4         30  
  121         877  
  58         282  
  241         1027  
  732         3114  
  2112         7023  
  1260         3803  
  119         464  
  50         166  
  215         878  
  214         1003  
  599         2214  
  31         149  
  92         446  
  85         389  
  90         282  
  732         2348  
  851         2305  
  682         2559  
  355         1217  
  66         316  
  70         253  
  46         194  
  104         521  
  287         1515  
  16         59  
  7         33  
  1427         4519  
  36         114  
  573         2461  
  537         1673  
  85         345  
  257         1148  
  437         1714  
  1826         5310  
  0         0  
  98         429  
  9         44  
  8         35  
  861         4074  
  9         40  
  85         295  
  562         1611  
  372         1254  
  469         1662  
  0         0  
  184         625  
  522         1781  
  67         212  
  916         2470  
  29         120  
  641         2292  
  92         305  
  271         1014  
  20         121  
  1048         3173  
  8         41  
  491         2184  
  48         177  
  52         164  
  22         78  
  1542         4956  
  87         340  
  10         39  
  11         50  
  2         11  
  4138         11035  
  121         530  
  2115         6229  
  22         93  
  13         50  
  47         145  
  136         661  
  2990         8792  
  163         531  
  101         361  
  524         1899  
  1135         3100  
  3         19  
  23         98  
  14         63  
  35         119  
  619         2085  
  83         303  
  6         35  
  26         93  
  126         541  
  2216         6049  
  4117         13385  
  2259         6066  
  3         17  
  9         36  
  298         944  
  0         0  
  1162         4590  
  23         95  
  426         1542  
  2012         5710  
  302         1469  
  223         731  
  70         278  
  4         43  
  155         574  
  41         130  
  767         3310  
  62         313  
  2         11  
  567         2451  
  23         81  
  15         72  
  2380         8358  
  4725         11882  
  1246         4511  
  392         1218  
  373         1580  
  693         2310  
  243         858  
  18         67  
  106         663  
  516         1780  
  153         509  
  328         1190  
  1224         3899  
  525         2991  
  57         221  
  40         159  
  11         62  
27 1176         50591 bless { children => [ @_ ], line_number => ($self->{TOKENLINE} + 1) }, $name;
  86         4201  
  2154         106106  
  3281         170150  
  397         18593  
  2789         38475  
  476         16094  
  104         1434  
  1835         47970  
  354         5912  
  422         37365  
  462         7938  
  23         801  
  244         9640  
  5898         61095  
  96         4818  
  173         12647  
  1378         18158  
  4309         76615  
  882         45774  
  57         1139  
  169         7538  
  236         8133  
  380         6781  
  1222         28304  
  4975         764841  
  165         3241  
  141         5763  
  1655         159880  
  53         1465  
  30         470  
  141         1891  
  432         5543  
  337         4097  
  1289         14956  
  2000         25978  
  1686         23928  
  195         2563  
  27         380  
  4         73  
  121         2208  
  58         757  
  241         3713  
  732         8631  
  2112         26012  
  1260         13325  
  119         1610  
  50         548  
  215         3420  
  214         3066  
  599         7601  
  31         399  
  92         1432  
  85         1310  
  90         1107  
  732         8174  
  851         10394  
  682         8820  
  355         4474  
  66         1034  
  70         997  
  46         840  
  104         1666  
  287         4764  
  16         191  
  7         92  
  1427         17663  
  36         405  
  573         8057  
  537         7614  
  85         1244  
  257         3467  
  437         6415  
  1826         20892  
  0         0  
  98         1619  
  9         140  
  8         114  
  861         11729  
  9         146  
  85         1204  
  562         6555  
  372         4868  
  469         6070  
  0         0  
  184         3072  
  522         6876  
  67         872  
  916         9938  
  29         441  
  641         10325  
  92         1077  
  271         3991  
  20         402  
  1048         15661  
  8         117  
  491         7133  
  48         524  
  52         775  
  22         248  
  1542         20470  
  87         1172  
  10         138  
  11         164  
  2         34  
  4138         44740  
  121         1697  
  2115         23811  
  22         287  
  13         191  
  47         520  
  136         2165  
  2990         33099  
  163         1912  
  101         1231  
  524         6982  
  1135         12046  
  3         61  
  23         353  
  14         201  
  35         441  
  619         7594  
  83         1108  
  6         105  
  26         350  
  126         1648  
  2216         25703  
  4117         44522  
  2259         24323  
  3         44  
  9         103  
  298         3856  
  0         0  
  1162         13573  
  23         305  
  426         6489  
  2012         22367  
  302         4278  
  223         3068  
  70         848  
  4         57  
  155         2153  
  41         519  
  767         9741  
  62         870  
  2         30  
  567         7215  
  23         273  
  15         183  
  2380         29425  
  4725         50692  
  1246         14986  
  392         5213  
  373         4938  
  693         10590  
  243         2987  
  18         238  
  106         1712  
  516         6172  
  153         1877  
  328         4332  
  1224         15362  
  525         9068  
  57         799  
  40         530  
  11         183  
28             }
29              
30             # [[[ LEXICON TOKENS, TYPES & RESERVED WORDS ]]]
31              
32             %token SHEBANG = /(^#!\/(?:\w+\/)*perl)/ # begin line, hash (octothorpe), bang, *NIX path to Perl; ex. '#!/usr/bin/perl'
33             %token USE_RPERL = /(\s*use\s+RPerl\s*;\s*)/ # 'use RPerl;'
34             %token USE_RPERL_AFTER = /(\s*use\s+RPerl::AfterSubclass\s*;\s*)/ # 'use RPerl::AfterSubclass;'
35             %token USE = /(use\s+)/ # 'use '
36             %token VERSION_NUMBER_ASSIGN = /\$VERSION\ =\ (\d\d?\.\d{3}\_\d{3});/ # DEV NOTE, CORRELATION #rp014: $VERSION assign v-number, only capture v-number, not a normal number; ex. '$VERSION = 12.345_678;' returns '12.345_678'
37             %token MY = /(my)/ # 'my'
38             %token LITERAL_NUMBER = /([+-]?(((\d{1,2}_)?(\d{3}_)*\d{3})|\d{1,2})(\.((\d{3}(_\d{3})*(_\d{1,2})?)|\d{1,2}))?(e[+-]?\d+)?)/ # number w/ underscores, optional scientific notation; ex. '12_345_678.910_1'
39             %token LITERAL_STRING = /(('([^'\\]+|(?:\\\\)+)+')|("((\\n)|(\\t)|[^"\@\$\\])*((\\n)|(\\t))+((\\n)|(\\t)|[^"\@\$\\])*")|(q\{([^}\\]+|(?:\\\\)+)*\}))/ # single quotes non-empty w/out odd backslashes; double quotes non-empty w/out sigils or extra backslashes & w/ newline or tab; or single q-braces w/out odd backslashes; ex. 'howdy $foo!' or "howdy foo!\n" or q{howdy $foo!}
40             %token SELF = /(\$self)/ # '$self'
41             %token VARIABLE_SYMBOL = /(\$(?:[a-zA-Z]\w*)?[a-z]\w*(::[a-zA-Z]\w*)*)/ # dollar sigil, scoped word with at least one lowercase in the first scope segment; ex. '$foo' or '$Foo::Bar::baz'
42             %token FHREF_SYMBOL_IN = /(\<\$[A-Z][A-Z0-9_]*\>)/ # less-than, dollar sigil, uppercase letter, uppercase letters & numbers & underscores, greater-than; ex. '<$MY_FILEHANDLE_23>'
43             %token FHREF_SYMBOL_BRACES = /(\{\$[A-Z][A-Z0-9_]*\})/ # left brace, dollar sigil, uppercase letter, uppercase letters & numbers & underscores, right brace; ex. '{$MY_FILEHANDLE_23}'
44             %token FHREF_SYMBOL = /(\$[A-Z][A-Z0-9_]*)/ # dollar sigil, uppercase letter, uppercase letters & numbers & underscores; ex. '$MY_FILEHANDLE_23'
45             %token TYPE_INTEGER = /(integer|unsigned_integer)\s+/ # 'integer' or 'unsigned_integer' followed by whitespace
46             %token TYPE_FHREF = /(filehandleref\s+)/ # 'filehandleref' followed by whitespace
47             %token TYPE_METHOD = /((?:[a-zA-Z]\w*)+(?:::[a-zA-Z]\w*)*::method)/ # optionally-scoped word, followed by '::method'; ex. 'string_arrayref::method' or 'Foo::Bar::method'
48             %token CONSTANT_CALL_SCOPED = /((?:[a-zA-Z]\w*)(?:::[a-zA-Z]\w*)*(?:::[A-Z0-9_]*)\(\))/ # optionally-scoped constant call; ex. 'MY_CONST()' or 'Foo::Bar::BAZ_CONST()'
49             %token WORD_SCOPED = /((?:[a-zA-Z]\w*)?(?:::[a-zA-Z]\w*)+)/ # optionally-scoped word; ex. 'my_word' or 'My_Word' or 'Foo::Bar::baz_word'
50             %token STDOUT_STDERR = /(\{\*STDOUT\}|\{\*STDERR\})/ # '{*STDOUT}' or '{*STDERR}'
51             %token STDIN = /(<STDIN>)/ # '<STDIN>'
52             %token ARGV = /(\@ARGV)/ # '@ARGV'
53             %token ENV = /(\%ENV)/ # '%ENV'
54              
55             # FEATURE BOUNTY #000, 1_000 CodeCoin: Implement all Perl functions AKA builtins (PERLOPS_PERLTYPES) as C++ functions (CPPOPS_*TYPES)
56             # Affects OP01_NAMED, OP01_NAMED_VOID, and OP10_NAMED_UNARY below, corresponding RPerl::Test::Operator* and C++ code; http://perldoc.perl.org/perlfunc.html
57              
58             # [[[ LEXICON TOKENS, OPERATORS ]]]
59              
60             # LEXICAL MATCHING: earlier declaration gets tried first, must be in correct order for all regexes to match
61             # DEV NOTE: tokens which are all letters (or, ne, x, print, open, ETC) & are always followed by whitespace when tidy (NOT not or argumentless next, last, croak, return, exit, chdir, etc)
62             # must be explicitly made to match the trailing whitespace in the regular expressions below, in order to avoid incorrectly matching substrings of user-defined words
63             %token OP24_LOGICAL_OR_XOR = /(or|xor)\s/ # precedence 24 infix: logical 'or' and 'xor', equivalent to '||' except for precedence
64             %token OP23_LOGICAL_AND = /(and)\s/ # precedence 23 infix: logical 'and', equivalent to '&&' except for precedence
65             %token OP22_LOGICAL_NEG = /(not)/ # precedence 22 prefix: logical negation 'not', equivalent to '!' except for precedence
66             %token OP21_LIST_COMMA = /(,)/ # precedence 21 infix: "list operators (rightward)" [1] AKA comma ','
67             %token OP20_HASH_FATARROW = /(=>)/ # precedence 20 infix: hash entry fat arrow AKA fat comma '=>'
68             %token OP19_LOOP_CONTROL_SCOLON = /(next;|last;)/ # precedence 19 prefix void: loop control 'next;', 'last;'
69             %token OP19_LOOP_CONTROL = /(next|last|redo)\s/ # precedence 19 prefix void: same as above, except allows 'redo' and requires loop label
70             %token OP18_TERNARY = /(\?)/ # precedence 18 infix: ternary conditional '?'
71             %token OP17_LIST_RANGE = /(\.\.)/ # precedence 17 infix: range '..'
72             %token OP16_LOGICAL_OR = /(\|\|)/ # precedence 16 infix: logical or '||'
73             %token OP15_LOGICAL_AND = /(&&)/ # precedence 15 infix: logical and '&&'
74             %token OP14_BITWISE_OR_XOR = /(\||\^)/ # precedence 14 infix: bitwise or '|', bitwise xor '^'
75             %token OP13_BITWISE_AND = /(&)/ # precedence 13 infix: bitwise and '&'
76             %token OP12_COMPARE_EQ_NE = /(==|!=|<=>|eq|ne|cmp)\s/ # precedence 12 infix: comparison numeric equal '==', numeric not equal '!=', numeric three-way '<=>', string equal 'eq', string not equal 'ne', string three-way 'cmp'
77             %token OP09_BITWISE_SHIFT = /(<<|>>)/ # precedence 09 infix: bitwise shift left '<<', shift right '>>'
78             # precedence 10 prefix: "named unary operators" [1] and Programming Perl, Chapter 3, List of All Named Unary Operators; 'scalar' not 'scalartype'
79             %token OP10_NAMED_UNARY_SCOLON = /(-A;|-B;|-C;|-M;|-O;|-R;|-S;|-T;|-W;|-X;|-b;|-c;|-d;|-e;|-f;|-g;|-k;|-l;|-o;|-p;|-r;|-s;|-t;|-u;|-w;|-x;|-z;|alarm;|caller;|chdir;|chroot;|cos;|defined;|delete;|do;|eval;|exists;|gethostbyname;|getnetbyname;|getpgrp;|getprotobyname;|glob;|gmtime;|goto;|hex;|int;|lc;|lcfirst;|length;|localtime;|lock;|log;|lstat;|oct;|ord;|quotemeta;|rand;|readlink;|ref;|require;|rmdir;|scalar;|sin;|sleep;|sqrt;|srand;|stat;|uc;|ucfirst;|umask;)/
80             %token OP10_NAMED_UNARY = /(-A\s|-B\s|-C\s|-M\s|-O\s|-R\s|-S\s|-T\s|-W\s|-X\s|-b\s|-c\s|-d\s|-e\s|-f\s|-g\s|-k\s|-l\s|-o\s|-p\s|-r\s|-s\s|-t\s|-u\s|-w\s|-x\s|-z\s|alarm\s|caller\s|chdir\s|chroot\s|cos\s|defined\s|delete\s|do\s|eval\s|exists\s|gethostbyname\s|getnetbyname\s|getpgrp\s|getprotobyname\s|glob\s|gmtime\s|goto\s|hex\s|int\s|lc\s|lcfirst\s|length\s|localtime\s|lock\s|log\s|lstat\s|oct\s|ord\s|quotemeta\s|rand\s|readlink\s|ref\s|require\s|rmdir\s|scalar\s|sin\s|sleep\s|sqrt\s|srand\s|stat\s|uc\s|ucfirst\s|umask\s)/
81             %token OP19_VARIABLE_ASSIGN_BY = /(\+=|-=|\*=|\/=|\.=)/ # precedence 19 infix: add assign '+=', subtract assign '-=', multiply assign '*=', divide assign '/=', string concatenation assign '.='
82             %token OP08_STRING_CAT = /(\.)/ # precedence 08 infix: string concatenate '.'
83             %token OP03_MATH_INC_DEC = /(\+\+|--)/ # precedence 03 prefix and postfix: increment '++', decrement '--'
84             %token OP04_MATH_POW = /(\*\*)/ # precedence 04 infix: arithmetic exponent AKA power '**'
85             %token OP07_MATH_MULT_DIV_MOD = /(\*|\/|\%|sse_mul|sse_div)/ # precedence 07 infix: arithmetic multiply '*', divide '/', modulo '%', SSE multiply 'sse_mul', SSE divide 'sse_div'
86             %token OP07_STRING_REPEAT = /(x)\s/ # precedence 07 infix: string repetition 'x'
87             %token OP06_REGEX_PATTERN = /([ms]\/.*(?:\/.*)?\/[a-z]*)/ # precedence 06 infix: regular expression pattern; ex. 'm/foo.*/xms' or 's/foo/bar/gxms'
88             %token OP06_REGEX_MATCH = /(=\~|!\~)/ # precedence 06 infix: regular expression match '=~', not match '!~'
89             %token OP05_LOGICAL_NEG = /(!)/ # precedence 05 prefix: logical negation '!'
90             %token OP05_BITWISE_NEG_LPAREN = /(\~\()/ # precedence 05 prefix: bitwise negation '~', AKA one's complement; include paren to disambiguate from regex or smartmatch
91             %token OP02_HASH_THINARROW = /(->\{)/ # precedence 02 infix: thin arrow, hash dereference and retrieval '->{'
92             %token OP02_ARRAY_THINARROW = /(->\[)/ # precedence 02 infix: thin arrow, array dereference and retrieval '->['
93             %token OP02_METHOD_THINARROW_NEW = /(->new\()/ # precedence 02 infix: thin arrow, class constructor '->new('
94             %token OP02_METHOD_THINARROW = /(->[a-zA-Z]\w*)/ # precedence 02 infix: thin arrow, method dereference and call; ex. '->foo' or '->Bar23'
95             %token OP05_MATH_NEG_LPAREN = /(-\()/ # precedence 05 prefix: arithmetic negative '-('; include paren to disambiguate from literal negative sign and subtraction operator
96             %token OP08_MATH_ADD_SUB = /(\+|-\s|sse_add|sse_sub)/ # precedence 08 infix: arithmetic add '+', subtract '-', SSE add 'sse_add', SSE subtract 'sse_sub'
97             %token OP11_COMPARE_LT_GT = /(<=|>=|<|>|le|ge|lt|gt)\s/ # precedence 11 infix: numeric comparison less or equal '<=', greater or equal '>=', less than '<', greater than '>'; string comparison less or equal 'le', greater or equal 'ge', less than 'lt', greater than 'gt'
98             %token OP19_VARIABLE_ASSIGN = /(=)/ # precedence 19 infix: assign '='
99             %token OP01_PRINT = /(print|printf)\s/ # precedence 01 prefix void: 'print' or 'printf' to STDOUT, STDERR, or filehandle
100             %token OP01_NAMED_VOID_SCOLON = /(croak;|die;|exit;|return;)/ # precedence 01 prefix void: "terms and list operators (leftward)" [1] AKA builtins, no return value; 'croak;', 'die;', 'exit;', 'return;'
101             %token OP01_NAMED_VOID_LPAREN = /(croak\(|exit\(|return\()/ # precedence 01 prefix void: same as above, except w/ parenthesis & w/out semicolon & w/out die; 'croak(', 'exit(', 'return('; ProhibitParensWithBuiltins excepts return() & exit(...); RequireTidyCode & RequireCarping excepts croak()
102             %token OP01_NAMED_VOID = /(croak|die|exit|return)\s/ # precedence 01 prefix void: same as above, except accepts argument(s); 'croak', 'die', 'exit', 'return'
103             %token OP01_QW = /(qw\([^()]*\))/ # precedence 01 closed: quote word; ex. 'qw()' or 'qw(foo bar baz)' or 'qw(Foo23 BarBax Ba_z 123)'
104             %token OP01_OPEN = /(open)\s/ # precedence 01 prefix: 'open' filehandle
105             %token OP01_CLOSE = /(close)\s/ # precedence 01 prefix: 'close' filehandle
106             # precedence 01 prefix: "terms and list operators (leftward)" [1] AKA builtins; http://perl5.git.perl.org/perl.git/blob/HEAD:/t/op/cproto.t [2]
107             # w/out all-uppercase Perl system builtin keywords ('__DATA__', 'AUTOLOAD', 'CHECK', etc); named unary operators above ('defined', 'exists', etc); and RPerl keywords ('use', 'our', 'my', 'package', 'for', etc)
108             %token OP01_NAMED_SCOLON = /(abs;|accept;|atan2;|bind;|binmode;|bless;|break;|chmod;|chomp;|chop;|chown;|chr;|closedir;|connect;|continue;|crypt;|dbmclose;|dbmopen;|default;|dump;|each;|endgrent;|endhostent;|endnetent;|endprotoent;|endpwent;|endservent;|eof;|evalbytes;|exec;|exp;|fc;|fcntl;|fileno;|flock;|fork;|format;|formline;|getc;|getgrent;|getgrgid;|getgrnam;|gethostbyaddr;|gethostent;|getlogin;|getnetbyaddr;|getnetent;|getpeername;|getppid;|getpriority;|getprotobynumber;|getprotoent;|getpwent;|getpwnam;|getpwuid;|getservbyname;|getservbyport;|getservent;|getsockname;|getsockopt;|given;|grep;|index;|ioctl;|join;|keys;|kill;|link;|listen;|local;|m;|map;|mkdir;|msgctl;|msgget;|msgrcv;|msgsnd;|opendir;|pack;|pipe;|pop;|pos;|prototype;|push;|q;|qq;|qr;|qx;|read;|readdir;|readline;|readpipe;|recv;|rename;|reset;|reverse;|rewinddir;|rindex;|s;|say;|seek;|seekdir;|select;|semctl;|semget;|semop;|send;|setgrent;|sethostent;|setnetent;|setpgrp;|setpriority;|setprotoent;|setpwent;|setservent;|setsockopt;|shift;|shmctl;|shmget;|shmread;|shmwrite;|shutdown;|socket;|socketpair;|sort;|splice;|split;|sprintf;|state;|study;|substr;|symlink;|syscall;|sysopen;|sysread;|sysseek;|system;|syswrite;|tell;|telldir;|tie;|tied;|time;|times;|tr;|truncate;|unless;|unlink;|unpack;|unshift;|untie;|until;|utime;|values;|vec;|wait;|waitpid;|wantarray;|warn;|when;|write;|y;)/
109             %token OP01_NAMED = /(abs\s|accept\s|atan2\s|bind\s|binmode\s|bless\s|break\s|chmod\s|chomp\s|chop\s|chown\s|chr\s|closedir\s|connect\s|continue\s|crypt\s|dbmclose\s|dbmopen\s|default\s|dump\s|each\s|endgrent\s|endhostent\s|endnetent\s|endprotoent\s|endpwent\s|endservent\s|eof\s|evalbytes\s|exec\s|exp\s|fc\s|fcntl\s|fileno\s|flock\s|fork\s|format\s|formline\s|getc\s|getgrent\s|getgrgid\s|getgrnam\s|gethostbyaddr\s|gethostent\s|getlogin\s|getnetbyaddr\s|getnetent\s|getpeername\s|getppid\s|getpriority\s|getprotobynumber\s|getprotoent\s|getpwent\s|getpwnam\s|getpwuid\s|getservbyname\s|getservbyport\s|getservent\s|getsockname\s|getsockopt\s|given\s|grep\s|index\s|ioctl\s|join\s|keys\s|kill\s|link\s|listen\s|local\s|m\s|map\s|mkdir\s|msgctl\s|msgget\s|msgrcv\s|msgsnd\s|opendir\s|pack\s|pipe\s|pop\s|pos\s|prototype\s|push\s|q\s|qq\s|qr\s|qx\s|read\s|readdir\s|readline\s|readpipe\s|recv\s|rename\s|reset\s|reverse\s|rewinddir\s|rindex\s|s\s|say\s|seek\s|seekdir\s|select\s|semctl\s|semget\s|semop\s|send\s|setgrent\s|sethostent\s|setnetent\s|setpgrp\s|setpriority\s|setprotoent\s|setpwent\s|setservent\s|setsockopt\s|shift\s|shmctl\s|shmget\s|shmread\s|shmwrite\s|shutdown\s|socket\s|socketpair\s|sort\s|splice\s|split\s|sprintf\s|state\s|study\s|substr\s|symlink\s|syscall\s|sysopen\s|sysread\s|sysseek\s|system\s|syswrite\s|tell\s|telldir\s|tie\s|tied\s|time\s|times\s|tr\s|truncate\s|unless\s|unlink\s|unpack\s|unshift\s|untie\s|until\s|utime\s|values\s|vec\s|wait\s|waitpid\s|wantarray\s|warn\s|when\s|write\s|y\s)/
110              
111             # [[[ SYNTAX, OPERATOR PRECEDENCE & ASSOCIATIVITY ]]]
112              
113             # later declaration gets higher priority; http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity [1]
114             %left OP24_LOGICAL_OR_XOR
115             %left OP23_LOGICAL_AND
116             %right OP22_LOGICAL_NEG
117             %left OP21_LIST_COMMA
118             %left OP20_HASH_FATARROW
119             %right OP19_LOOP_CONTROL_SCOLON
120             %right OP19_LOOP_CONTROL
121             %right OP19_VARIABLE_ASSIGN_BY
122             %right OP19_VARIABLE_ASSIGN
123             %right OP18_TERNARY
124             %nonassoc OP17_LIST_RANGE
125             %left OP16_LOGICAL_OR
126             %left OP15_LOGICAL_AND
127             %left OP14_BITWISE_OR_XOR
128             %left OP13_BITWISE_AND
129             %nonassoc OP12_COMPARE_EQ_NE
130             %nonassoc OP11_COMPARE_LT_GT
131             %nonassoc OP10_NAMED_UNARY
132             %nonassoc OP10_NAMED_UNARY_SCOLON
133             %left OP09_BITWISE_SHIFT
134             %left OP08_STRING_CAT
135             %left OP08_MATH_ADD_SUB
136             %left OP07_MATH_MULT_DIV_MOD
137             %left OP07_STRING_REPEAT
138             %left OP06_REGEX_MATCH
139             %left OP06_REGEX_PATTERN
140             %right OP05_MATH_NEG_LPAREN
141             %right OP05_LOGICAL_NEG
142             %right OP05_BITWISE_NEG_LPAREN
143             %right OP04_MATH_POW
144             %nonassoc OP03_MATH_INC_DEC
145             %left OP02_HASH_THINARROW
146             %left OP02_ARRAY_THINARROW
147             %left OP02_METHOD_THINARROW_NEW
148             %left OP02_METHOD_THINARROW
149             %left OP01_NAMED
150             %left OP01_NAMED_SCOLON
151             %left OP01_CLOSE
152             %left OP01_OPEN
153             %left OP01_QW
154             %left OP01_NAMED_VOID_SCOLON
155             %left OP01_NAMED_VOID_LPAREN
156             %left OP01_NAMED_VOID
157             %left OP01_PRINT
158              
159             # [[[ LEXICON TOKENS, PUNCTUATION & USER-DEFINED WORDS ]]]
160              
161             %token COLON = /(:)/ # ':'
162             %token LPAREN_MY = /(\(\s*my)/ # '(my'
163             %token LPAREN = /(\()/ # '('
164             %token LBRACKET = /(\[)/ # '['
165             %token LBRACE = /(\{)/ # '{'
166             %token WORD = /([a-z]\w*|[A-Z]\w*[a-z]\w*)/ # lowercase letter followed by optional word characters; or uppercase letter followed by at least one lowercase letter and optional word characters; ex. 'foo' or 'foo23' or 'Foo23'
167             %token WORD_UPPERCASE = /([A-Z][A-Z0-9_]*|[A-Z])/ # single uppercase letter, or uppercase letter followed by uppercase letters, numbers, and underscores; ex. 'FOO' or 'FOOBAR_42_HOWDY'
168              
169             %%
170              
171             # [[[ SYNTAX PRODUCTION RULES, FILE FORMATS ]]]
172              
173       324     CompileUnit: Program | (ModuleHeader Module)+ ;
174       1124     Program: SHEBANG Critic? USE_RPERL Header Critic* Include* Constant* Subroutine* Operation+ ;
175       357     ModuleHeader: Critic? USE_RPERL? 'package' WordScoped ';' Header ;
176             Module: Package | Class ;
177       123     Package: Critic* Include* Constant* Subroutine+ LITERAL_NUMBER ';' ;
178       1485     Header: 'use strict;' 'use warnings;' USE_RPERL_AFTER? 'our' VERSION_NUMBER_ASSIGN;
179       2472     Critic: '## no critic qw(' WORD+ ')';
180             Include: USE WordScoped ';' | USE WordScoped OP01_QW ';' ;
181             Constant: 'use constant' WORD_UPPERCASE OP20_HASH_FATARROW TypeInnerConstant Literal ';' ;
182             #Constant: 'use constant' WORD_UPPERCASE OP20_HASH_FATARROW TypeInnerConstant ConstantValue ';' ; # NEED UPGRADE: constant array & hash refs not read-only as of Perl v5.20
183             #ConstantValue: Literal | LBRACKET TypeInnerConstant? Literal (OP21_LIST_COMMA TypeInnerConstant? Literal)* ']' |
184             # LBRACE WORD_UPPERCASE OP20_HASH_FATARROW TypeInnerConstant? Literal (OP21_LIST_COMMA WORD_UPPERCASE OP20_HASH_FATARROW TypeInnerConstant? Literal)* '}' ;
185       209     Subroutine: 'our' Type VARIABLE_SYMBOL '= sub {' SubroutineArguments? Operation* '}' ';' ;
186       37     SubroutineArguments: LPAREN_MY Type VARIABLE_SYMBOL (OP21_LIST_COMMA MY Type VARIABLE_SYMBOL)* ')' OP19_VARIABLE_ASSIGN '@ARG;' ;
187       83     Class: 'use parent qw(' WordScoped ')' ';' Include Critic* Include* Constant* Properties SubroutineOrMethod* LITERAL_NUMBER ';' ;
188       32     Properties: 'our hashref $properties' OP19_VARIABLE_ASSIGN LBRACE HashEntryProperties (OP21_LIST_COMMA HashEntryProperties)* '}' ';' |
189             'our hashref $properties' OP19_VARIABLE_ASSIGN LBRACE '}' ';';
190       194     Method: 'our' TYPE_METHOD VARIABLE_SYMBOL '= sub {' MethodArguments? Operation* '}' ';' ;
191       77     MethodArguments: LPAREN_MY Type SELF (OP21_LIST_COMMA MY Type VARIABLE_SYMBOL)* ')' OP19_VARIABLE_ASSIGN '@ARG;' ;
192             SubroutineOrMethod: Subroutine | Method ;
193              
194             # [[[ SYNTAX PRODUCTION RULES, OPERATIONS ]]]
195              
196             Operation: Expression ';' | OP01_NAMED_SCOLON | OP10_NAMED_UNARY_SCOLON | Statement ;
197             Operator: LPAREN OP01_PRINT FHREF_SYMBOL_BRACES ListElements ')' |
198             OP01_NAMED SubExpression | LPAREN OP01_NAMED ListElement OP21_LIST_COMMA ListElements ')' |
199             OP01_OPEN MY TYPE_FHREF FHREF_SYMBOL OP21_LIST_COMMA LITERAL_STRING OP21_LIST_COMMA SubExpression |
200             OP01_CLOSE FHREF_SYMBOL | OP03_MATH_INC_DEC Variable | Variable OP03_MATH_INC_DEC | SubExpression OP04_MATH_POW SubExpression |
201             OP05_BITWISE_NEG_LPAREN SubExpression ')' | OP05_LOGICAL_NEG SubExpression | OP05_MATH_NEG_LPAREN SubExpression ')' |
202             SubExpression OP06_REGEX_MATCH OP06_REGEX_PATTERN | SubExpression OP07_STRING_REPEAT SubExpression |
203             SubExpression OP07_MATH_MULT_DIV_MOD SubExpression | SubExpression OP08_MATH_ADD_SUB SubExpression |
204             SubExpression OP08_STRING_CAT SubExpression | SubExpression OP09_BITWISE_SHIFT SubExpression |
205             OP10_NAMED_UNARY SubExpression | OP10_NAMED_UNARY | SubExpression OP11_COMPARE_LT_GT SubExpression |
206             SubExpression OP12_COMPARE_EQ_NE SubExpression | SubExpression OP13_BITWISE_AND SubExpression |
207             SubExpression OP14_BITWISE_OR_XOR SubExpression | SubExpression OP15_LOGICAL_AND SubExpression | SubExpression OP16_LOGICAL_OR SubExpression |
208             SubExpression OP17_LIST_RANGE SubExpression | SubExpression OP18_TERNARY VariableOrLiteral COLON VariableOrLiteral |
209             OP22_LOGICAL_NEG SubExpression | SubExpression OP23_LOGICAL_AND SubExpression | SubExpression OP24_LOGICAL_OR_XOR SubExpression ;
210       68     OperatorVoid: OP01_PRINT (STDOUT_STDERR)? ListElements ';' | OP01_PRINT FHREF_SYMBOL_BRACES ListElements ';' |
211       54     OP01_NAMED_VOID_SCOLON | OP01_NAMED_VOID_LPAREN ListElements? ')' ';' | OP01_NAMED_VOID ListElements ';' |
212             OP01_NAMED ListElement OP21_LIST_COMMA ListElements ';' | OP19_LOOP_CONTROL_SCOLON | OP19_LOOP_CONTROL LoopLabel ';' ;
213       481     Expression: Operator | WORD_UPPERCASE LPAREN ')' | CONSTANT_CALL_SCOPED | WordScoped LPAREN ListElements? ')' |
214       37     Variable OP02_METHOD_THINARROW LPAREN ListElements? ')' | WordScoped OP02_METHOD_THINARROW_NEW ')' ;
215             SubExpression: Expression | 'undef' | Literal | Variable | ArrayReference | ArrayDereference | HashReference | HashDereference | LPAREN SubExpression ')' ;
216             SubExpressionOrInput: SubExpression | FHREF_SYMBOL_IN | STDIN;
217             SubExpressionOrVarMod: SubExpression | VariableModification;
218       157     Statement: Conditional | (LoopLabel COLON)? Loop | OperatorVoid | VariableDeclaration | VariableModification ';' ;
219       28     Conditional: 'if' LPAREN SubExpression ')' CodeBlock ('elsif' LPAREN SubExpression ')' CodeBlock)* ('else' CodeBlock)? ;
220             Loop: LoopFor | LoopForEach | LoopWhile ;
221             LoopFor: 'for' MY TYPE_INTEGER VARIABLE_SYMBOL LPAREN SubExpression OP17_LIST_RANGE SubExpression ')' CodeBlock |
222             'for' LPAREN_MY TYPE_INTEGER VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN OpNamedScolonOrSubExp VARIABLE_SYMBOL OP11_COMPARE_LT_GT OpNamedScolonOrSubExp SubExpressionOrVarMod ')' CodeBlock ;
223             LoopForEach: 'foreach' MY Type VARIABLE_SYMBOL LPAREN ListElements ')' CodeBlock ;
224             LoopWhile: 'while' LPAREN SubExpression ')' CodeBlock | 'while' LPAREN_MY Type VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN SubExpressionOrInput ')' CodeBlock;
225       335     CodeBlock: LBRACE Operation+ '}' ;
226              
227             # [[[ SYNTAX PRODUCTION RULES, VARIABLE DATA ]]]
228              
229       312     Variable: VariableSymbolOrSelf VariableRetrieval* ;
230             VariableRetrieval: OP02_ARRAY_THINARROW SubExpression ']' | OP02_HASH_THINARROW SubExpression '}' | OP02_HASH_THINARROW WORD '}' ;
231             VariableDeclaration: MY Type VARIABLE_SYMBOL ';' | MY Type VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN OpNamedScolonOrSubExpIn |
232             MY Type VARIABLE_SYMBOL OP02_ARRAY_THINARROW SubExpression ']' OP19_VARIABLE_ASSIGN 'undef' ';' | MY TYPE_FHREF FHREF_SYMBOL ';' ;
233             VariableModification: Variable OP19_VARIABLE_ASSIGN SubExpressionOrInput | Variable OP19_VARIABLE_ASSIGN_BY SubExpression ;
234       4758     ListElements: ListElement (OP21_LIST_COMMA ListElement)* ;
235             ListElement: SubExpression | TypeInner SubExpression | OP01_QW | ARGV;
236       67     ArrayReference: LBRACKET ListElements? ']' ;
237       33     ArrayDereference: '@{' Variable '}' | '@{' TypeInner? ArrayReference '}' ;
238       640     HashEntry: VarOrLitOrOpStrOrWord OP20_HASH_FATARROW TypeInner? SubExpression | HashDereference | ENV ;
239             HashEntryProperties: OpStringOrWord OP20_HASH_FATARROW TypeInnerProperties ;
240       885     HashReference: LBRACE HashEntry (OP21_LIST_COMMA HashEntry)* '}' | LBRACE '}' ;
241       26     HashDereference: '%{' Variable '}' | '%{' TypeInner? HashReference '}' ;
242              
243             # [[[ SYNTAX PRODUCTION RULES, USER-DEFINED WORDS ]]]
244              
245             WordScoped: WORD | WORD_SCOPED ;
246             LoopLabel: WORD_UPPERCASE ;
247             Type: WORD | WORD_SCOPED | TYPE_INTEGER ;
248             TypeInner: MY Type '$TYPED_' OpStringOrWord OP19_VARIABLE_ASSIGN ;
249             TypeInnerProperties: MY Type '$TYPED_' OpStringOrWord OP19_VARIABLE_ASSIGN SubExpression |
250             MY Type '$TYPED_' OpStringOrWord OP02_ARRAY_THINARROW SubExpression ']' OP19_VARIABLE_ASSIGN 'undef' ;
251             TypeInnerConstant: MY Type '$TYPED_' WORD_UPPERCASE OP19_VARIABLE_ASSIGN ;
252             VariableOrLiteral: Variable | Literal ;
253             VarOrLitOrOpStrOrWord: Variable | Literal | OpStringOrWord ;
254             VariableSymbolOrSelf: VARIABLE_SYMBOL | SELF ;
255             Literal: LITERAL_NUMBER | LITERAL_STRING ;
256             OpNamedScolonOrSubExp: OP01_NAMED_SCOLON | OP10_NAMED_UNARY_SCOLON | SubExpression ';' ;
257             OpNamedScolonOrSubExpIn: OP01_NAMED_SCOLON | OP10_NAMED_UNARY_SCOLON | SubExpressionOrInput ';' ;
258             OpStringOrWord: OP24_LOGICAL_OR_XOR | OP23_LOGICAL_AND | OP22_LOGICAL_NEG | OP19_LOOP_CONTROL_SCOLON | OP19_LOOP_CONTROL | OP12_COMPARE_EQ_NE |
259             OP11_COMPARE_LT_GT | OP10_NAMED_UNARY | OP08_MATH_ADD_SUB | OP07_MATH_MULT_DIV_MOD | OP07_STRING_REPEAT | OP01_NAMED | OP01_CLOSE |
260             OP01_OPEN | OP01_NAMED_VOID | OP01_PRINT | WORD ;
261              
262             %%
263              
264             # [[[ SEMANTIC MAP, ABSTRACT SYNTAX TREE NODES TO CLASSES ]]]
265              
266             {
267             # Map from abstract syntax tree to classes
268             # DEV NOTE: derived from grammar rules in Grammar.output file, use the following process for grammar updates...
269             # 1. Update grammar code in this file, above this line only
270             # 2. Run `script/development/grammar_recompile.sh`
271             # 3. Run `perl t/12_parse.t` for new & existing grammar parse-only tests, if errors goto step 1
272             # 4. Inspect updates from Grammar.output file, note starting & finishing & increment/decrement numbers if any rule numbers have changed
273             # 5a. Run `scripts/development/grammar_increment.pl START FINISH INCREMENT` if rules added from step 4, repeat if needed
274             # 5b. Run `scripts/development/grammar_decrement.pl START FINISH DECREMENT` if rules deleted from step 4, repeat if needed
275             # 6. Copy updates from Grammar.output file into this file with now-unique numbers, below this line only, if rules added
276             # 7. Run `script/development/grammar_recompile.sh` again
277             our string_hashref $RULES = {
278             CompileUnit_4 => 'RPerl::CompileUnit::Program', # CompileUnit -> Program
279             CompileUnit_5 => 'RPerl::CompileUnit::Module', # CompileUnit -> PLUS-2
280             Program_18 => 'RPerl::CompileUnit::Program', # Program -> SHEBANG OPTIONAL-3 USE_RPERL Header STAR-4 STAR-5 STAR-6 STAR-7 PLUS-8
281             ModuleHeader_23 => 'RPerl::CompileUnit::Module::Header', # ModuleHeader -> OPTIONAL-9 OPTIONAL-10 'package' WordScoped ';' Header
282             Module_24 => 'RPerl::CompileUnit::Module::Package', # Module -> Package
283             Module_25 => 'RPerl::CompileUnit::Module::Class::Generator', # Module -> Class
284             Package_34 => 'RPerl::CompileUnit::Module::Package', # Package -> STAR-10 STAR-11 STAR-12 PLUS-13 LITERAL_NUMBER ';'
285             Header_37 => 'RPerl::NonGenerator', # Header -> 'use strict;' 'use warnings;' OPTIONAL-15 'our' VERSION_NUMBER_ASSIGN
286             Critic_40 => 'RPerl::CompileUnit::Critic', # Critic -> '## no critic qw(' PLUS-14 ')'
287             Include_41 => 'RPerl::CompileUnit::Include', # Include -> USE WordScoped ';'
288             Include_42 => 'RPerl::CompileUnit::Include', # Include -> USE WordScoped OP01_QW ';'
289             Constant_43 => 'RPerl::CompileUnit::Constant', # Constant -> 'use constant' WORD_UPPERCASE OP20_HASH_FATARROW TypeInnerConstant Literal ';'
290             Subroutine_48 => 'RPerl::CodeBlock::Subroutine', # Subroutine -> 'our' Type VARIABLE_SYMBOL '= sub {' OPTIONAL-16 STAR-17 '}' ';'
291             SubroutineArguments_52 => 'RPerl::CodeBlock::Subroutine::Arguments', # SubroutineArguments -> LPAREN_MY Type VARIABLE_SYMBOL STAR-19 ')' OP19_VARIABLE_ASSIGN '@ARG;'
292             Class_61 => 'RPerl::CompileUnit::Module::Class::Generator', # Class -> 'use parent qw(' WordScoped ')' ';' Include STAR-20 STAR-21 STAR-22 Properties STAR-23 LITERAL_NUMBER ';'
293             Properties_65 => 'RPerl::NonGenerator', # Properties -> 'our hashref $properties' OP19_VARIABLE_ASSIGN LBRACE HashEntryProperties STAR-27 '}' ';'
294             Properties_66 => 'RPerl::NonGenerator', # Properties -> 'our hashref $properties' OP19_VARIABLE_ASSIGN LBRACE '}' ';'
295             Method_71 => 'RPerl::CodeBlock::Subroutine::Method', # Method -> 'our' TYPE_METHOD VARIABLE_SYMBOL '= sub {' OPTIONAL-26 STAR-27 '}' ';'
296             MethodArguments_75 => 'RPerl::CodeBlock::Subroutine::Method::Arguments', # MethodArguments -> LPAREN_MY TYPE_SELF STAR-29 ')' OP19_VARIABLE_ASSIGN '@ARG;'
297             SubroutineOrMethod_76 => 'RPerl::CodeBlock::Subroutine', # SubroutineOrMethod -> Subroutine
298             SubroutineOrMethod_77 => 'RPerl::CodeBlock::Subroutine::Method', # SubroutineOrMethod -> Method
299             Operation_78 => 'RPerl::Operation::Expression', # Operation -> Expression ';'
300             Operation_79 => 'RPerl::Operation::Expression::Operator::Named', # Operation -> OP01_NAMED_SCOLON
301             Operation_80 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operation -> OP10_NAMED_UNARY_SCOLON
302             Operation_81 => 'RPerl::Operation::Statement', # Operation -> Statement
303             Operator_82 => 'RPerl::Operation::Expression::Operator::Print', # Operator -> LPAREN OP01_PRINT FHREF_SYMBOL_BRACES ListElements ')'
304             Operator_83 => 'RPerl::Operation::Expression::Operator::Named', # Operator -> OP01_NAMED SubExpression
305             Operator_84 => 'RPerl::Operation::Expression::Operator::Named', # Operator -> LPAREN OP01_NAMED ListElement OP21_LIST_COMMA ListElements ')'
306             Operator_85 => 'RPerl::Operation::Expression::Operator::Open', # Operator -> OP01_OPEN MY TYPE_FHREF FHREF_SYMBOL OP21_LIST_COMMA LITERAL_STRING OP21_LIST_COMMA SubExpression
307             Operator_86 => 'RPerl::Operation::Expression::Operator::Close', # Operator -> OP01_CLOSE FHREF_SYMBOL
308             Operator_87 => 'RPerl::Operation::Expression::Operator::IncrementDecrement', # Operator -> OP03_MATH_INC_DEC Variable
309             Operator_88 => 'RPerl::Operation::Expression::Operator::IncrementDecrement', # Operator -> Variable OP03_MATH_INC_DEC
310             Operator_89 => 'RPerl::Operation::Expression::Operator::Arithmetic::Power', # Operator -> SubExpression OP04_MATH_POW SubExpression
311             Operator_90 => 'RPerl::Operation::Expression::Operator::Bitwise::Negation', # Operator -> OP05_BITWISE_NEG_LPAREN SubExpression ')'
312             Operator_91 => 'RPerl::Operation::Expression::Operator::Logical::Negation', # Operator -> OP05_LOGICAL_NEG SubExpression
313             Operator_92 => 'RPerl::Operation::Expression::Operator::Arithmetic::Negative', # Operator -> OP05_MATH_NEG_LPAREN SubExpression ')'
314             Operator_93 => 'RPerl::Operation::Expression::Operator::RegularExpression', # Operator -> SubExpression OP06_REGEX_MATCH OP06_REGEX_PATTERN
315             Operator_94 => 'RPerl::Operation::Expression::Operator::String::Repeat', # Operator -> SubExpression OP07_STRING_REPEAT SubExpression
316             Operator_95 => 'RPerl::Operation::Expression::Operator::Arithmetic::MultiplyDivideModulo', # Operator -> SubExpression OP07_MATH_MULT_DIV_MOD SubExpression
317             Operator_96 => 'RPerl::Operation::Expression::Operator::Arithmetic::AddSubtract', # Operator -> SubExpression OP08_MATH_ADD_SUB SubExpression
318             Operator_97 => 'RPerl::Operation::Expression::Operator::String::Concatenate', # Operator -> SubExpression OP08_STRING_CAT SubExpression
319             Operator_98 => 'RPerl::Operation::Expression::Operator::Bitwise::Shift', # Operator -> SubExpression OP09_BITWISE_SHIFT SubExpression
320             Operator_99 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operator -> OP10_NAMED_UNARY SubExpression
321             Operator_100 => 'RPerl::Operation::Expression::Operator::NamedUnary', # Operator -> OP10_NAMED_UNARY
322             Operator_101 => 'RPerl::Operation::Expression::Operator::Compare::LessThanGreaterThan', # Operator -> SubExpression OP11_COMPARE_LT_GT SubExpression
323             Operator_102 => 'RPerl::Operation::Expression::Operator::Compare::EqualNotEqual', # Operator -> SubExpression OP12_COMPARE_EQ_NE SubExpression
324             Operator_103 => 'RPerl::Operation::Expression::Operator::Bitwise::And', # Operator -> SubExpression OP13_BITWISE_AND SubExpression
325             Operator_104 => 'RPerl::Operation::Expression::Operator::Bitwise::OrXor', # Operator -> SubExpression OP14_BITWISE_OR_XOR SubExpression
326             Operator_105 => 'RPerl::Operation::Expression::Operator::Logical::And', # Operator -> SubExpression OP15_LOGICAL_AND SubExpression
327             Operator_106 => 'RPerl::Operation::Expression::Operator::Logical::OrXor', # Operator -> SubExpression OP16_LOGICAL_OR SubExpression
328             Operator_107 => 'RPerl::Operation::Expression::Operator::List::Range', # Operator -> SubExpression OP17_LIST_RANGE SubExpression
329             Operator_108 => 'RPerl::Operation::Expression::Operator::Ternary', # Operator -> SubExpression OP18_TERNARY VariableOrLiteral COLON VariableOrLiteral
330             Operator_109 => 'RPerl::Operation::Expression::Operator::Logical::Negation', # Operator -> OP22_LOGICAL_NEG SubExpression
331             Operator_110 => 'RPerl::Operation::Expression::Operator::Logical::And', # Operator -> SubExpression OP23_LOGICAL_AND SubExpression
332             Operator_111 => 'RPerl::Operation::Expression::Operator::Logical::OrXor', # Operator -> SubExpression OP24_LOGICAL_OR_XOR SubExpression
333             OperatorVoid_117 => 'RPerl::Operation::Statement::OperatorVoid::Print', # OperatorVoid -> OP01_PRINT OPTIONAL-31 ListElements ';'
334             OperatorVoid_118 => 'RPerl::Operation::Statement::OperatorVoid::Print', # OperatorVoid -> OP01_PRINT FHREF_SYMBOL_BRACES ListElements ';'
335             OperatorVoid_119 => 'RPerl::Operation::Statement::OperatorVoid::Named', # OperatorVoid -> OP01_NAMED_VOID_SCOLON
336             OperatorVoid_120 => 'RPerl::Operation::Statement::OperatorVoid::Named', # OperatorVoid -> OP01_NAMED_VOID_LPAREN OPTIONAL-32 ')' ';'
337             OperatorVoid_121 => 'RPerl::Operation::Statement::OperatorVoid::Named', # OperatorVoid -> OP01_NAMED_VOID ListElements ';'
338             OperatorVoid_122 => 'RPerl::Operation::Expression::Operator::Named', # OperatorVoid -> OP01_NAMED ListElement OP21_LIST_COMMA ListElements ';'
339             OperatorVoid_123 => 'RPerl::Operation::Statement::OperatorVoid::LoopControl', # OperatorVoid -> OP19_LOOP_CONTROL_SCOLON
340             OperatorVoid_124 => 'RPerl::Operation::Statement::OperatorVoid::LoopControl', # OperatorVoid -> OP19_LOOP_CONTROL LoopLabel ';'
341             Expression_129 => 'RPerl::Operation::Expression::Operator', # Expression -> Operator
342             Expression_130 => 'RPerl::Operation::Expression::ConstantCall', # Expression -> WORD_UPPERCASE LPAREN ')'
343             Expression_131 => 'RPerl::Operation::Expression::ConstantCall', # Expression -> CONSTANT_CALL_SCOPED
344             Expression_132 => 'RPerl::Operation::Expression::SubroutineCall', # Expression -> WordScoped LPAREN OPTIONAL-33 ')'
345             Expression_133 => 'RPerl::Operation::Expression::SubroutineCall::MethodCall', # Expression -> Variable OP02_METHOD_THINARROW LPAREN OPTIONAL-34 ')'
346             Expression_134 => 'RPerl::Operation::Expression::SubroutineCall::MethodCall::ConstructorCall', # Expression -> WordScoped OP02_METHOD_THINARROW_NEW ')'
347             SubExpression_135 => 'RPerl::Operation::Expression', # SubExpression -> Expression
348             SubExpression_136 => 'RPerl::Operation::Expression::SubExpression::Literal::Undefined', # SubExpression -> 'undef'
349             SubExpression_137 => 'RPerl::Operation::Expression::SubExpression::Literal', # SubExpression -> Literal
350             SubExpression_138 => 'RPerl::Operation::Expression::SubExpression::Variable', # SubExpression -> Variable
351             SubExpression_139 => 'RPerl::DataStructure::Array::Reference', # SubExpression -> ArrayReference
352             SubExpression_140 => 'RPerl::Operation::Expression::SubExpression::ArrayDereference', # SubExpression -> ArrayDereference
353             SubExpression_141 => 'RPerl::DataStructure::Hash::Reference', # SubExpression -> HashReference
354             SubExpression_142 => 'RPerl::Operation::Expression::SubExpression::HashDereference', # SubExpression -> HashDereference
355             SubExpression_143 => 'RPerl::Operation::Expression::SubExpression::Parenthesis', # SubExpression -> LPAREN SubExpression ')'
356             SubExpressionOrInput_144 => 'RPerl::Operation::Expression::SubExpression', # SubExpressionOrInput -> SubExpression
357             SubExpressionOrInput_145 => 'RPerl::InputOutput::FilehandleIn', # SubExpressionOrInput -> FHREF_SYMBOL_IN
358             SubExpressionOrInput_146 => 'RPerl::InputOutput::Stdin', # SubExpressionOrInput -> STDIN
359             SubExpressionOrVarMod_147 => 'RPerl::Operation::Expression::SubExpression', # SubExpressionOrVarMod -> SubExpression
360             SubExpressionOrVarMod_148 => 'RPerl::Operation::Statement::VariableModification', # SubExpressionOrVarMod -> VariableModification
361             Statement_152 => 'RPerl::Operation::Statement::Conditional', # Statement -> Conditional
362             Statement_153 => 'RPerl::Operation::Statement::Loop', # Statement -> OPTIONAL-36 Loop
363             Statement_154 => 'RPerl::Operation::Statement::OperatorVoid', # Statement -> OperatorVoid
364             Statement_155 => 'RPerl::Operation::Statement::VariableDeclaration', # Statement -> VariableDeclaration
365             Statement_156 => 'RPerl::Operation::Statement::VariableModification', # Statement -> VariableModification ';'
366             Conditional_163 => 'RPerl::Operation::Statement::Conditional', # Conditional -> 'if' LPAREN SubExpression ')' CodeBlock STAR-38 OPTIONAL-40
367             Loop_164 => 'RPerl::Operation::Statement::Loop::For', # Loop -> LoopFor
368             Loop_165 => 'RPerl::Operation::Statement::Loop::ForEach', # Loop -> LoopForEach
369             Loop_166 => 'RPerl::Operation::Statement::Loop::While', # Loop -> LoopWhile
370             LoopFor_167 => 'RPerl::Operation::Statement::Loop::For', # LoopFor -> 'for' MY TYPE_INTEGER VARIABLE_SYMBOL LPAREN SubExpression OP17_LIST_RANGE SubExpression ')' CodeBlock
371             LoopFor_168 => 'RPerl::Operation::Statement::Loop::For', # LoopFor -> 'for' LPAREN_MY TYPE_INTEGER VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN OpNamedScolonOrSubExp VARIABLE_SYMBOL OP11_COMPARE_LT_GT OpNamedScolonOrSubExp SubExpressionOrVarMod ')' CodeBlock
372             LoopForEach_169 => 'RPerl::Operation::Statement::Loop::ForEach', # LoopForEach -> 'foreach' MY Type VARIABLE_SYMBOL LPAREN ListElements ')' CodeBlock
373             LoopWhile_170 => 'RPerl::Operation::Statement::Loop::While', # LoopWhile -> 'while' LPAREN SubExpression ')' CodeBlock
374             LoopWhile_171 => 'RPerl::Operation::Statement::Loop::While', # LoopWhile -> 'while' LPAREN_MY Type VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN SubExpressionOrInput ')' CodeBlock
375             CodeBlock_174 => 'RPerl::CodeBlock', # CodeBlock -> LBRACE PLUS-41 '}'
376             Variable_177 => 'RPerl::Operation::Expression::SubExpression::Variable', # Variable -> VariableSymbolOrSelf STAR-44
377             VariableRetrieval_178 => 'RPerl::Operation::Expression::SubExpression::Variable::Retrieval', # VariableRetrieval -> OP02_ARRAY_THINARROW SubExpression ']'
378             VariableRetrieval_179 => 'RPerl::Operation::Expression::SubExpression::Variable::Retrieval', # VariableRetrieval -> OP02_HASH_THINARROW SubExpression '}'
379             VariableRetrieval_180 => 'RPerl::Operation::Expression::SubExpression::Variable::Retrieval', # VariableRetrieval -> OP02_HASH_THINARROW WORD '}'
380             VariableDeclaration_181 => 'RPerl::Operation::Statement::VariableDeclaration', # VariableDeclaration -> MY Type VARIABLE_SYMBOL ';'
381             VariableDeclaration_182 => 'RPerl::Operation::Statement::VariableDeclaration', # VariableDeclaration -> MY Type VARIABLE_SYMBOL OP19_VARIABLE_ASSIGN OpNamedScolonOrSubExpIn
382             VariableDeclaration_183 => 'RPerl::Operation::Statement::VariableDeclaration', # VariableDeclaration -> MY Type VARIABLE_SYMBOL OP02_ARRAY_THINARROW SubExpression ']' OP19_VARIABLE_ASSIGN 'undef' ';'
383             VariableDeclaration_184 => 'RPerl::Operation::Statement::VariableDeclaration', # VariableDeclaration -> MY TYPE_FHREF FHREF_SYMBOL ';'
384             VariableModification_185 => 'RPerl::Operation::Statement::VariableModification', # VariableModification -> Variable OP19_VARIABLE_ASSIGN SubExpressionOrInput
385             VariableModification_186 => 'RPerl::Operation::Statement::VariableModification', # VariableModification -> Variable OP19_VARIABLE_ASSIGN_BY SubExpression
386             ListElements_190 => 'RPerl::DataStructure::Array::ListElements', # ListElements -> ListElement STAR-43
387             ListElement_191 => 'RPerl::Operation::Expression::SubExpression', # ListElement -> SubExpression
388             ListElement_192 => 'RPerl::Operation::Expression::SubExpression', # ListElement -> TypeInner SubExpression
389             ListElement_193 => 'RPerl::DataStructure::Array::ListElement', # ListElement -> OP01_QW
390             ListElement_194 => 'RPerl::DataStructure::Array::ListElement', # ListElement -> ARGV
391             ArrayReference_197 => 'RPerl::DataStructure::Array::Reference', # ArrayReference -> LBRACKET OPTIONAL-45 ']'
392             ArrayDereference_200 => 'RPerl::Operation::Expression::SubExpression::ArrayDereference', # ArrayDereference -> '@{' Variable '}'
393             ArrayDereference_201 => 'RPerl::Operation::Expression::SubExpression::ArrayDereference', # ArrayDereference -> '@{' OPTIONAL-47 ArrayReference '}'
394             HashEntry_204 => 'RPerl::DataStructure::Hash::Entry', # HashEntry -> VarOrLitOrOpStrOrWord OP20_HASH_FATARROW OPTIONAL-47 SubExpression
395             HashEntry_205 => 'RPerl::Operation::Expression::SubExpression::HashDereference', # HashEntry -> HashDereference
396             HashEntry_206 => 'RPerl::DataStructure::Hash::Entry', # HashEntry -> ENV
397             HashEntryProperties_207 => 'RPerl::NonGenerator', # HashEntryProperties -> OpStringOrWord OP20_HASH_FATARROW TypeInnerProperties
398             HashReference_211 => 'RPerl::DataStructure::Hash::Reference', # HashReference -> LBRACE HashEntry STAR-50 '}'
399             HashReference_212 => 'RPerl::DataStructure::Hash::Reference', # HashReference -> LBRACE '}'
400             HashDereference_215 => 'RPerl::Operation::Expression::SubExpression::HashDereference', # HashDereference -> '%{' Variable '}'
401             HashDereference_216 => 'RPerl::Operation::Expression::SubExpression::HashDereference', # HashDereference -> '%{' OPTIONAL-51 HashReference '}'
402             WordScoped_217 => 'RPerl::NonGenerator', # WordScoped -> WORD
403             WordScoped_218 => 'RPerl::NonGenerator', # WordScoped -> WORD_SCOPED
404             LoopLabel_219 => 'RPerl::NonGenerator', # LoopLabel -> WORD_UPPERCASE # RPerl::Operation::Statement -> LoopLabel COLON
405             Type_220 => 'RPerl::NonGenerator', # Type -> WORD
406             Type_221 => 'RPerl::NonGenerator', # Type -> WORD_SCOPED
407             Type_222 => 'RPerl::NonGenerator', # Type -> TYPE_INTEGER
408             TypeInner_223 => 'RPerl::DataType::TypeInner', # TypeInner -> MY Type '$TYPED_' OpStringOrWord OP19_VARIABLE_ASSIGN
409             TypeInnerProperties_224 => 'RPerl::NonGenerator', # TypeInnerProperties -> MY Type '$TYPED_' OpStringOrWord OP19_VARIABLE_ASSIGN SubExpression
410             TypeInnerProperties_225 => 'RPerl::NonGenerator', # TypeInnerProperties -> MY Type '$TYPED_' OpStringOrWord OP02_ARRAY_THINARROW SubExpression ']' OP19_VARIABLE_ASSIGN 'undef'
411             TypeInnerConstant_226 => 'RPerl::NonGenerator', # TypeInnerConstant -> MY Type '$TYPED_' WORD_UPPERCASE OP19_VARIABLE_ASSIGN
412             VariableOrLiteral_227 => 'RPerl::Operation::Expression::SubExpression::Variable', # VariableOrLiteral -> Variable
413             VariableOrLiteral_228 => 'RPerl::Operation::Expression::SubExpression::Literal', # VariableOrLiteral -> Literal
414             VarOrLitOrOpStrOrWord_229 => 'RPerl::Operation::Expression::SubExpression::Variable', # VarOrLitOrOpStrOrWord -> Variable
415             VarOrLitOrOpStrOrWord_230 => 'RPerl::Operation::Expression::SubExpression::Literal', # VarOrLitOrOpStrOrWord -> Literal
416             VarOrLitOrOpStrOrWord_231 => 'RPerl::NonGenerator', # VarOrLitOrOpStrOrWord -> OpStringOrWord
417             VariableSymbolOrSelf_232 => 'RPerl::NonGenerator', # VariableSymbolOrSelf -> VARIABLE_SYMBOL
418             VariableSymbolOrSelf_233 => 'RPerl::NonGenerator', # VariableSymbolOrSelf -> SELF
419             Literal_234 => 'RPerl::Operation::Expression::SubExpression::Literal::Number', # Literal -> LITERAL_NUMBER
420             Literal_235 => 'RPerl::Operation::Expression::SubExpression::Literal::String', # Literal -> LITERAL_STRING
421             OpNamedScolonOrSubExp_236 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExp -> OP01_NAMED_SCOLON
422             OpNamedScolonOrSubExp_237 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExp -> OP10_NAMED_UNARY_SCOLON
423             OpNamedScolonOrSubExp_238 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExp -> SubExpression ';'
424             OpNamedScolonOrSubExpIn_239 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExpIn -> OP01_NAMED_SCOLON
425             OpNamedScolonOrSubExpIn_240 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExpIn -> OP10_NAMED_UNARY_SCOLON
426             OpNamedScolonOrSubExpIn_241 => 'RPerl::NonGenerator', # OpNamedScolonOrSubExpIn -> SubExpressionOrInput ';'
427             OpStringOrWord_242 => 'RPerl::NonGenerator', # OpStringOrWord -> OP24_LOGICAL_OR_XOR
428             OpStringOrWord_243 => 'RPerl::NonGenerator', # OpStringOrWord -> OP23_LOGICAL_AND
429             OpStringOrWord_244 => 'RPerl::NonGenerator', # OpStringOrWord -> OP22_LOGICAL_NEG
430             OpStringOrWord_245 => 'RPerl::NonGenerator', # OpStringOrWord -> OP19_LOOP_CONTROL_SCOLON
431             OpStringOrWord_246 => 'RPerl::NonGenerator', # OpStringOrWord -> OP19_LOOP_CONTROL
432             OpStringOrWord_247 => 'RPerl::NonGenerator', # OpStringOrWord -> OP12_COMPARE_EQ_NE
433             OpStringOrWord_248 => 'RPerl::NonGenerator', # OpStringOrWord -> OP11_COMPARE_LT_GT
434             OpStringOrWord_249 => 'RPerl::NonGenerator', # OpStringOrWord -> OP10_NAMED_UNARY
435             OpStringOrWord_250 => 'RPerl::NonGenerator', # OpStringOrWord -> OP08_MATH_ADD_SUB
436             OpStringOrWord_251 => 'RPerl::NonGenerator', # OpStringOrWord -> OP07_MATH_MULT_DIV_MOD
437             OpStringOrWord_252 => 'RPerl::NonGenerator', # OpStringOrWord -> OP07_STRING_REPEAT
438             OpStringOrWord_253 => 'RPerl::NonGenerator', # OpStringOrWord -> OP01_NAMED
439             OpStringOrWord_254 => 'RPerl::NonGenerator', # OpStringOrWord -> OP01_CLOSE
440             OpStringOrWord_255 => 'RPerl::NonGenerator', # OpStringOrWord -> OP01_OPEN
441             OpStringOrWord_256 => 'RPerl::NonGenerator', # OpStringOrWord -> OP01_NAMED_VOID
442             OpStringOrWord_257 => 'RPerl::NonGenerator', # OpStringOrWord -> OP01_PRINT
443             OpStringOrWord_258 => 'RPerl::NonGenerator', # OpStringOrWord -> WORD
444             };
445              
446             1;
447             }