# this file was generated by yacc -v perly.y > perly.output
   0  $accept : prog $end

   1  prog : progstart lineseq

   2  block : '{' remember lineseq '}'

   3  remember :

   4  progstart :

   5  mblock : '{' mremember lineseq '}'

   6  mremember :

   7  lineseq :
   8          | lineseq decl
   9          | lineseq line

  10  line : label cond
  11       | loop
  12       | label ';'
  13       | label sideff ';'

  14  sideff : error
  15         | expr
  16         | expr IF expr
  17         | expr UNLESS expr
  18         | expr WHILE expr
  19         | expr UNTIL iexpr
  20         | expr FOR expr

  21  else :
  22       | ELSE mblock
  23       | ELSIF '(' mexpr ')' mblock else

  24  cond : IF '(' remember mexpr ')' mblock else
  25       | UNLESS '(' remember miexpr ')' mblock else

  26  cont :
  27       | CONTINUE block

  28  loop : label WHILE '(' remember mtexpr ')' mblock cont
  29       | label UNTIL '(' remember miexpr ')' mblock cont
  30       | label FOR MY remember my_scalar '(' mexpr ')' mblock cont
  31       | label FOR scalar '(' remember mexpr ')' mblock cont
  32       | label FOR '(' remember mexpr ')' mblock cont
  33       | label FOR '(' remember mnexpr ';' mtexpr ';' mnexpr ')' mblock
  34       | label block cont

  35  nexpr :
  36        | sideff

  37  texpr :
  38        | expr

  39  iexpr : expr

  40  mexpr : expr

  41  mnexpr : nexpr

  42  mtexpr : texpr

  43  miexpr : iexpr

  44  label :
  45        | LABEL

  46  decl : format
  47       | subrout
  48       | mysubrout
  49       | package
  50       | use

  51  format : FORMAT startformsub formname block

  52  formname : WORD
  53           |

  54  mysubrout : MYSUB startsub subname proto subattrlist subbody

  55  subrout : SUB startsub subname proto subattrlist subbody

  56  startsub :

  57  startanonsub :

  58  startformsub :

  59  subname : WORD

  60  proto :
  61        | THING

  62  subattrlist :
  63              | COLONATTR THING
  64              | COLONATTR

  65  myattrlist : COLONATTR THING
  66             | COLONATTR

  67  subbody : block
  68          | ';'

  69  package : PACKAGE WORD ';'
  70          | PACKAGE ';'

  71  $$1 :

  72  use : USE startsub $$1 WORD WORD listexpr ';'

  73  expr : expr ANDOP expr
  74       | expr OROP expr
  75       | argexpr

  76  argexpr : argexpr ','
  77          | argexpr ',' term
  78          | term

  79  listop : LSTOP indirob argexpr
  80         | FUNC '(' indirob expr ')'
  81         | term ARROW method '(' listexprcom ')'
  82         | term ARROW method
  83         | METHOD indirob listexpr
  84         | FUNCMETH indirob '(' listexprcom ')'
  85         | LSTOP listexpr
  86         | FUNC '(' listexprcom ')'

  87  $$2 :

  88  listop : LSTOPSUB startanonsub block $$2 listexpr

  89  method : METHOD
  90         | scalar

  91  subscripted : star '{' expr ';' '}'
  92              | scalar '[' expr ']'
  93              | term ARROW '[' expr ']'
  94              | subscripted '[' expr ']'
  95              | scalar '{' expr ';' '}'
  96              | term ARROW '{' expr ';' '}'
  97              | subscripted '{' expr ';' '}'
  98              | term ARROW '(' ')'
  99              | term ARROW '(' expr ')'
 100              | subscripted '(' expr ')'
 101              | subscripted '(' ')'

 102  termbinop : term ASSIGNOP term
 103            | term POWOP term
 104            | term MULOP term
 105            | term ADDOP term
 106            | term SHIFTOP term
 107            | term RELOP term
 108            | term EQOP term
 109            | term BITANDOP term
 110            | term BITOROP term
 111            | term DOTDOT term
 112            | term ANDAND term
 113            | term OROR term
 114            | term MATCHOP term

 115  termunop : '-' term
 116           | '+' term
 117           | '!' term
 118           | '~' term
 119           | term POSTINC
 120           | term POSTDEC
 121           | PREINC term
 122           | PREDEC term

 123  anonymous : '[' expr ']'
 124            | '[' ']'
 125            | HASHBRACK expr ';' '}'
 126            | HASHBRACK ';' '}'
 127            | ANONSUB startanonsub proto subattrlist block

 128  termdo : DO term
 129         | DO block
 130         | DO WORD '(' ')'
 131         | DO WORD '(' expr ')'
 132         | DO scalar '(' ')'
 133         | DO scalar '(' expr ')'

 134  term : termbinop
 135       | termunop
 136       | anonymous
 137       | termdo
 138       | term '?' term ':' term
 139       | REFGEN term
 140       | myattrterm
 141       | LOCAL term
 142       | '(' expr ')'
 143       | '(' ')'
 144       | scalar
 145       | star
 146       | hsh
 147       | ary
 148       | arylen
 149       | subscripted
 150       | '(' expr ')' '[' expr ']'
 151       | '(' ')' '[' expr ']'
 152       | ary '[' expr ']'
 153       | ary '{' expr ';' '}'
 154       | THING
 155       | amper
 156       | amper '(' ')'
 157       | amper '(' expr ')'
 158       | NOAMP WORD listexpr
 159       | LOOPEX
 160       | LOOPEX term
 161       | NOTOP argexpr
 162       | UNIOP
 163       | UNIOP block
 164       | UNIOP term
 165       | UNIOPSUB term
 166       | FUNC0
 167       | FUNC0 '(' ')'
 168       | FUNC0SUB
 169       | FUNC1 '(' ')'
 170       | FUNC1 '(' expr ')'
 171       | PMFUNC '(' term ')'
 172       | PMFUNC '(' term ',' term ')'
 173       | WORD
 174       | listop

 175  myattrterm : MY myterm myattrlist
 176             | MY myterm

 177  myterm : '(' expr ')'
 178         | '(' ')'
 179         | scalar
 180         | hsh
 181         | ary

 182  listexpr :
 183           | argexpr

 184  listexprcom :
 185              | expr
 186              | expr ','

 187  my_scalar : scalar

 188  amper : '&' indirob

 189  scalar : '$' indirob

 190  ary : '@' indirob

 191  hsh : '%' indirob

 192  arylen : DOLSHARP indirob

 193  star : '*' indirob

 194  indirob : WORD
 195          | scalar
 196          | block
 197          | PRIVATEREF
