PHP_Parser_DocblockParser
[ class tree: PHP_Parser_DocblockParser ] [ index: PHP_Parser_DocblockParser ] [ all elements ]

Source for file DocblockParser.php

Documentation is available at DocblockParser.php

  1. <?php
  2. /* Driver template for the PHP_PHP_Parser_DocblockParserrGenerator parser generator. (PHP port of LEMON)
  3. */
  4.  
  5. /**
  6.  * This can be used to store both the string representation of
  7.  * a token, and any useful meta-data associated with the token.
  8.  *
  9.  * meta-data should be stored as an array
  10.  */
  11. class PHP_Parser_DocblockParseryyToken implements ArrayAccess
  12. {
  13.     public $string '';
  14.     public $metadata = array();
  15.  
  16.     function __construct($s$m = array())
  17.     {
  18.         if ($s instanceof PHP_Parser_DocblockParseryyToken{
  19.             $this->string $s->string;
  20.             $this->metadata $s->metadata;
  21.         else {
  22.             $this->string = (string) $s;
  23.             if ($m instanceof PHP_Parser_DocblockParseryyToken{
  24.                 $this->metadata $m->metadata;
  25.             elseif (is_array($m)) {
  26.                 $this->metadata $m;
  27.             }
  28.         }
  29.     }
  30.  
  31.     function __toString()
  32.     {
  33.         return $this->_string;
  34.     }
  35.  
  36.     function offsetExists($offset)
  37.     {
  38.         return isset($this->metadata[$offset]);
  39.     }
  40.  
  41.     function offsetGet($offset)
  42.     {
  43.         return $this->metadata[$offset];
  44.     }
  45.  
  46.     function offsetSet($offset$value)
  47.     {
  48.         if ($offset === null{
  49.             if (isset($value[0])) {
  50.                 $x ($value instanceof PHP_Parser_DocblockParseryyToken?
  51.                     $value->metadata : $value;
  52.                 $this->metadata array_merge($this->metadata$x);
  53.                 return;
  54.             }
  55.             $offset count($this->metadata);
  56.         }
  57.         if ($value === null{
  58.             return;
  59.         }
  60.         if ($value instanceof PHP_Parser_DocblockParseryyToken{
  61.             if ($value->metadata{
  62.                 $this->metadata[$offset$value->metadata;
  63.             }
  64.         elseif ($value{
  65.             $this->metadata[$offset$value;
  66.         }
  67.     }
  68.  
  69.     function offsetUnset($offset)
  70.     {
  71.         unset($this->metadata[$offset]);
  72.     }
  73. }
  74.  
  75. /** The following structure represents a single element of the
  76.  * parser's stack.  Information stored includes:
  77.  *
  78.  *   +  The state number for the parser at this level of the stack.
  79.  *
  80.  *   +  The value of the token stored at this level of the stack.
  81.  *      (In other words, the "major" token.)
  82.  *
  83.  *   +  The semantic value stored at this level of the stack.  This is
  84.  *      the information used by the action routines in the grammar.
  85.  *      It is sometimes called the "minor" token.
  86.  */
  87. class PHP_Parser_DocblockParseryyStackEntry
  88. {
  89.     public $stateno;       /* The state-number */
  90.     public $major;         /* The major token value.  This is the code
  91.                      ** number for the token at this stack level */
  92.     public $minor/* The user-supplied minor token value.  This
  93.                      ** is the value of the token  */
  94. };
  95.  
  96. // code external to the class is included here
  97.  
  98. // declare_class is output here
  99. #line 2 "DocblockParser.y"
  100. class PHP_Parser_DocblockParser#line 102 "DocblockParser.php"
  101. {
  102. /* First off, code is included which follows the "include_class" declaration
  103. ** in the input file. */
  104. #line 22 "DocblockParser.y"
  105.  
  106.     static public $transTable = array (
  107.         1 => self::DOCBLOCK_NEWLINE,
  108.         2 => self::DOCBLOCK_WHITESPACE,
  109.         5 => self::DOCBLOCK_TAG,
  110.         6 => self::DOCBLOCK_INTERNAL,
  111.         7 => self::DOCBLOCK_INLINETAG,
  112.         9 => self::DOCBLOCK_ESCAPEDINLINETAG,
  113.         10 => self::DOCBLOCK_INLINETAGCONTENTS,
  114.         11 => self::DOCBLOCK_ESCAPEDHTML,
  115.         12 => self::DOCBLOCK_CODEOPEN,
  116.         13 => self::DOCBLOCK_PREOPEN,
  117.         14 => self::DOCBLOCK_SAMPOPEN,
  118.         15 => self::DOCBLOCK_VAROPEN,
  119.         16 => self::DOCBLOCK_KBDOPEN,
  120.         17 => self::DOCBLOCK_POPEN,
  121.         18 => self::DOCBLOCK_BOPEN,
  122.         19 => self::DOCBLOCK_IOPEN,
  123.         20 => self::DOCBLOCK_OLOPEN,
  124.         21 => self::DOCBLOCK_ULOPEN,
  125.         22 => self::DOCBLOCK_LIOPEN,
  126.         23 => self::DOCBLOCK_CODECLOSE,
  127.         24 => self::DOCBLOCK_PRECLOSE,
  128.         25 => self::DOCBLOCK_SAMPCLOSE,
  129.         26 => self::DOCBLOCK_VARCLOSE,
  130.         27 => self::DOCBLOCK_KBDCLOSE,
  131.         28 => self::DOCBLOCK_PCLOSE,
  132.         29 => self::DOCBLOCK_BCLOSE,
  133.         30 => self::DOCBLOCK_ICLOSE,
  134.         31 => self::DOCBLOCK_OLCLOSE,
  135.         32 => self::DOCBLOCK_ULCLOSE,
  136.         33 => self::DOCBLOCK_LICLOSE,
  137.         34 => self::DOCBLOCK_BR,
  138.         36 => self::DOCBLOCK_TEXT,
  139.         37 => self::DOCBLOCK_ENDINLINETAG,
  140.         38 => self::DOCBLOCK_ENDINTERNAL,
  141.         39 => self::DOCBLOCK_ESCAPEDINLINEEND,
  142.         42 => self::DOCBLOCK_SIMPLELISTSTART,
  143.         43 => self::DOCBLOCK_SIMPLELISTEND,
  144.         44 => self::DOCBLOCK_SIMPLELISTBULLET,
  145.         );
  146.  
  147.     function __construct($lex$processInternal = false)
  148.     {
  149.         $this->lex $lex;
  150.         $this->_processInternal $processInternal;
  151.     }
  152.  
  153.     public $data;
  154.     private $_processInternal;
  155.     private $_inInternal = false;
  156.     private $_inP = false;
  157. #line 160 "DocblockParser.php"
  158.  
  159. /* Next is all token values, as class constants
  160. */
  161. /* 
  162. ** These constants (all generated automatically by the parser generator)
  163. ** specify the various kinds of tokens (terminals) that the parser
  164. ** understands. 
  165. **
  166. ** Each symbol here is a terminal symbol in the grammar.
  167. */
  168.     const DOCBLOCK_SIMPLELISTBULLET      =  1;
  169.     const DOCBLOCK_LIOPEN                =  2;
  170.     const DOCBLOCK_POPEN                 =  3;
  171.     const DOCBLOCK_INLINETAG             =  4;
  172.     const DOCBLOCK_ENDINLINETAG          =  5;
  173.     const DOCBLOCK_INLINETAGCONTENTS     =  6;
  174.     const DOCBLOCK_ESCAPEDINLINEEND      =  7;
  175.     const DOCBLOCK_BOPEN                 =  8;
  176.     const DOCBLOCK_BCLOSE                =  9;
  177.     const DOCBLOCK_IOPEN                 = 10;
  178.     const DOCBLOCK_ICLOSE                = 11;
  179.     const DOCBLOCK_CODEOPEN              = 12;
  180.     const DOCBLOCK_CODECLOSE             = 13;
  181.     const DOCBLOCK_PREOPEN               = 14;
  182.     const DOCBLOCK_PRECLOSE              = 15;
  183.     const DOCBLOCK_SAMPOPEN              = 16;
  184.     const DOCBLOCK_SAMPCLOSE             = 17;
  185.     const DOCBLOCK_VAROPEN               = 18;
  186.     const DOCBLOCK_VARCLOSE              = 19;
  187.     const DOCBLOCK_KBDOPEN               = 20;
  188.     const DOCBLOCK_KBDCLOSE              = 21;
  189.     const DOCBLOCK_BR                    = 22;
  190.     const DOCBLOCK_ESCAPEDHTML           = 23;
  191.     const DOCBLOCK_ESCAPEDINLINETAG      = 24;
  192.     const DOCBLOCK_SIMPLELISTSTART       = 25;
  193.     const DOCBLOCK_SIMPLELISTEND         = 26;
  194.     const DOCBLOCK_OLOPEN                = 27;
  195.     const DOCBLOCK_OLCLOSE               = 28;
  196.     const DOCBLOCK_ULOPEN                = 29;
  197.     const DOCBLOCK_ULCLOSE               = 30;
  198.     const DOCBLOCK_LICLOSE               = 31;
  199.     const DOCBLOCK_NEWLINE               = 32;
  200.     const DOCBLOCK_WHITESPACE            = 33;
  201.     const DOCBLOCK_TEXT                  = 34;
  202.     const DOCBLOCK_INTERNAL              = 35;
  203.     const DOCBLOCK_ENDINTERNAL           = 36;
  204.     const DOCBLOCK_PCLOSE                = 37;
  205.     const DOCBLOCK_TAG                   = 38;
  206.     const YY_NO_ACTION = 194;
  207.     const YY_ACCEPT_ACTION = 193;
  208.     const YY_ERROR_ACTION = 192;
  209.  
  210. /* Next are that tables used to determine what action to take based on the
  211. ** current state and lookahead token.  These tables are used to implement
  212. ** functions that take a state number and lookahead value and return an
  213. ** action integer.  
  214. **
  215. ** Suppose the action integer is N.  Then the action is determined as
  216. ** follows
  217. **
  218. **   0 <= N < self::YYNSTATE                              Shift N.  That is,
  219. **                                                        push the lookahead
  220. **                                                        token onto the stack
  221. **                                                        and goto state N.
  222. **
  223. **   self::YYNSTATE <= N < self::YYNSTATE+self::YYNRULE   Reduce by rule N-YYNSTATE.
  224. **
  225. **   N == self::YYNSTATE+self::YYNRULE                    A syntax error has occurred.
  226. **
  227. **   N == self::YYNSTATE+self::YYNRULE+1                  The parser accepts its
  228. **                                                        input. (and concludes parsing)
  229. **
  230. **   N == self::YYNSTATE+self::YYNRULE+2                  No such action.  Denotes unused
  231. **                                                        slots in the yy_action[] table.
  232. **
  233. ** The action table is constructed as a single large static array $yy_action.
  234. ** Given state S and lookahead X, the action is computed as
  235. **
  236. **      self::$yy_action[self::$yy_shift_ofst[S] + X ]
  237. **
  238. ** If the index value self::$yy_shift_ofst[S]+X is out of range or if the value
  239. ** self::$yy_lookahead[self::$yy_shift_ofst[S]+X] is not equal to X or if
  240. ** self::$yy_shift_ofst[S] is equal to self::YY_SHIFT_USE_DFLT, it means that
  241. ** the action is not in the table and that self::$yy_default[S] should be used instead.  
  242. **
  243. ** The formula above is for computing the action when the lookahead is
  244. ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
  245. ** a reduce action) then the static $yy_reduce_ofst array is used in place of
  246. ** the static $yy_shift_ofst array and self::YY_REDUCE_USE_DFLT is used in place of
  247. ** self::YY_SHIFT_USE_DFLT.
  248. **
  249. ** The following are the tables generated in this section:
  250. **
  251. **  self::$yy_action        A single table containing all actions.
  252. **  self::$yy_lookahead     A table containing the lookahead for each entry in
  253. **                          yy_action.  Used to detect hash collisions.
  254. **  self::$yy_shift_ofst    For each state, the offset into self::$yy_action for
  255. **                          shifting terminals.
  256. **  self::$yy_reduce_ofst   For each state, the offset into self::$yy_action for
  257. **                          shifting non-terminals after a reduce.
  258. **  self::$yy_default       Default action for each state.
  259. */
  260.     const YY_SZ_ACTTAB = 928;
  261. static public $yy_action = array(
  262.  /*     0 */    46,   17,   69,   16,    5,   55,    9,   42,    7,   14,
  263.  /*    10 */    10,   12,    6,   14,    2,   14,    4,   49,   86,   85,
  264.  /*    20 */    98,   48,   56,   35,   41,   34,  111,   61,  100,  100,
  265.  /*    30 */   100,  102,   46,   62,   62,   65,    5,  117,    9,   74,
  266.  /*    40 */     7,   53,   10,   78,    6,    8,    2,   84,    4,   54,
  267.  /*    50 */    86,   85,   98,   48,   14,   35,   51,   34,   47,   67,
  268.  /*    60 */   100,  100,  100,  102,   57,   46,   64,   64,   63,    5,
  269.  /*    70 */    92,    9,  140,    7,  140,   10,   50,    6,   52,    2,
  270.  /*    80 */   114,    4,   87,   86,   85,   98,   48,  140,   35,  140,
  271.  /*    90 */    34,  140,  140,  100,  100,  100,  102,  140,   46,   58,
  272.  /*   100 */    37,   44,    5,  140,    9,  140,    7,  140,   10,  140,
  273.  /*   110 */     6,  140,    2,  140,    4,  140,   86,   85,   98,   48,
  274.  /*   120 */   140,   35,  140,   34,  140,  140,  100,  100,  100,  102,
  275.  /*   130 */   101,   46,   59,   36,   43,    5,  140,    9,  140,    7,
  276.  /*   140 */   140,   10,   79,    6,  140,    2,  140,    4,  140,   86,
  277.  /*   150 */    85,   98,   48,  140,   35,  140,   34,  140,  140,  100,
  278.  /*   160 */   100,  100,  102,  140,   46,   62,   62,   65,    5,   82,
  279.  /*   170 */     9,  140,    7,  140,   10,  140,    6,  140,    2,  140,
  280.  /*   180 */     4,  140,   86,   85,   98,   48,  140,   35,  140,   34,
  281.  /*   190 */   140,  140,  100,  100,  100,  102,  140,   46,   68,   11,
  282.  /*   200 */   140,    5,  140,    9,  140,    7,  140,   10,  140,    6,
  283.  /*   210 */   140,    2,  140,    4,  140,   86,   85,   98,   48,  140,
  284.  /*   220 */    35,  140,   34,  140,  140,  100,  100,  100,  102,  140,
  285.  /*   230 */    45,   69,   46,  140,  140,  140,    5,  140,    9,  140,
  286.  /*   240 */     7,  140,   10,  140,    6,  140,    2,  140,    4,  140,
  287.  /*   250 */    86,   85,   98,   48,  140,   35,  140,   34,  140,  140,
  288.  /*   260 */   106,  106,  106,  102,  140,   46,  140,  140,  140,    5,
  289.  /*   270 */   140,    9,  140,    7,   80,   10,  140,    6,  140,    2,
  290.  /*   280 */   140,    4,  140,   86,   85,   98,   48,  140,   35,  140,
  291.  /*   290 */    34,  140,  140,  100,  100,  100,  102,  140,   46,  140,
  292.  /*   300 */   140,  140,    5,  140,    9,   81,    7,  140,   10,  140,
  293.  /*   310 */     6,  140,    2,  140,    4,  140,   86,   85,   98,   48,
  294.  /*   320 */   140,   35,  140,   34,  140,  140,  100,  100,  100,  102,
  295.  /*   330 */   140,   46,  140,  140,   16,    5,  140,    9,  140,    7,
  296.  /*   340 */   140,   10,  140,    6,  140,    2,  140,    4,  140,   86,
  297.  /*   350 */    85,   98,   48,  140,   35,  140,   34,  140,   60,  100,
  298.  /*   360 */   100,  100,  102,   46,   64,   64,   63,    5,  140,    9,
  299.  /*   370 */   140,    7,  140,   10,  140,    6,  140,    2,  140,    4,
  300.  /*   380 */   140,   86,   85,   98,   48,  140,   35,  140,   34,  140,
  301.  /*   390 */   108,  100,  100,  100,  102,   46,  140,  140,  140,    5,
  302.  /*   400 */   140,    9,  140,    7,  140,   10,  140,    6,   83,    2,
  303.  /*   410 */   140,    4,  140,   86,   85,   98,   48,  140,   35,  140,
  304.  /*   420 */    34,  140,  140,  100,  100,  100,  102,   69,   46,  140,
  305.  /*   430 */   140,  140,    5,  140,    9,  140,    7,  140,   10,  140,
  306.  /*   440 */     6,  140,    2,  140,    4,  140,   86,   85,   98,   48,
  307.  /*   450 */   140,   35,  140,   34,  140,  140,  100,  100,  100,  102,
  308.  /*   460 */   140,  193,  116,   40,  140,  140,    1,   38,  118,   91,
  309.  /*   470 */    90,   93,  140,  105,   99,  112,  140,  110,  113,   95,
  310.  /*   480 */    89,   88,   15,   76,   70,   11,  140,   46,  140,  140,
  311.  /*   490 */   140,    5,  140,    9,  140,    7,  140,   10,  140,    6,
  312.  /*   500 */   140,    2,  140,    4,  140,   86,   85,   98,   48,  140,
  313.  /*   510 */    35,  140,   34,  140,  140,  106,  106,  106,  102,  140,
  314.  /*   520 */    46,  140,  140,  140,    5,  140,    9,  140,    7,  140,
  315.  /*   530 */    10,  140,    6,  140,    2,  140,    4,  140,   86,   85,
  316.  /*   540 */    98,   48,  140,   35,  140,   34,  140,  140,  100,  100,
  317.  /*   550 */   100,  102,   39,  104,   91,   90,   93,  140,  103,   99,
  318.  /*   560 */   112,  140,  110,  113,   94,   97,   96,   15,  107,   70,
  319.  /*   570 */    11,  140,   28,  140,  118,   91,   90,   93,  140,  105,
  320.  /*   580 */    99,  112,  140,  110,  113,  140,  140,  140,   15,   76,
  321.  /*   590 */   140,   32,  140,  118,   91,   90,   93,  140,  105,   99,
  322.  /*   600 */   112,  140,  110,  113,  140,  140,  140,   15,   76,   27,
  323.  /*   610 */   140,  118,   91,   90,   93,  140,  105,   99,  112,  140,
  324.  /*   620 */   110,  113,  140,  140,  140,   15,   76,   29,  140,  118,
  325.  /*   630 */    91,   90,   93,  140,  105,   99,  112,  140,  110,  113,
  326.  /*   640 */   140,  140,  140,   15,   76,   24,  140,  118,   91,   90,
  327.  /*   650 */    93,  140,  105,   99,  112,  140,  110,  113,  140,  140,
  328.  /*   660 */   140,   15,   76,   22,  140,  118,   91,   90,   93,  140,
  329.  /*   670 */   105,   99,  112,  140,  110,  113,  140,  140,  140,   15,
  330.  /*   680 */    76,   21,  140,  118,   91,   90,   93,  140,  105,   99,
  331.  /*   690 */   112,  140,  110,  113,  140,  140,  140,   15,   76,   20,
  332.  /*   700 */   140,  118,   91,   90,   93,  140,  105,   99,  112,  140,
  333.  /*   710 */   110,  113,  140,  140,  140,   15,   76,   26,  140,  118,
  334.  /*   720 */    91,   90,   93,  140,  105,   99,  112,  140,  110,  113,
  335.  /*   730 */   140,  140,  140,   15,   76,   31,  140,  118,   91,   90,
  336.  /*   740 */    93,  140,  105,   99,  112,  140,  110,  113,  140,  140,
  337.  /*   750 */   140,   15,   76,   25,  140,  118,   91,   90,   93,  140,
  338.  /*   760 */   105,   99,  112,  140,  110,  113,  140,  140,  140,   15,
  339.  /*   770 */    76,   33,  140,  118,   91,   90,   93,  140,  105,   99,
  340.  /*   780 */   112,  140,  110,  113,  140,  140,  140,   15,   76,   18,
  341.  /*   790 */   140,  118,   91,   90,   93,  140,  105,   99,  112,  140,
  342.  /*   800 */   110,  113,  140,  140,  140,   15,   76,   30,  140,  118,
  343.  /*   810 */    91,   90,   93,  140,  105,   99,  112,  140,  110,  113,
  344.  /*   820 */   140,  140,  140,   15,   76,   19,  140,  118,   91,   90,
  345.  /*   830 */    93,  140,  105,   99,  112,  140,  110,  113,  140,  140,
  346.  /*   840 */   140,   15,   76,   23,  140,  118,   91,   90,   93,    3,
  347.  /*   850 */   105,   99,  112,  140,  110,  113,  140,   13,  140,   15,
  348.  /*   860 */    76,  140,  104,   91,   90,   93,   13,  103,   99,  112,
  349.  /*   870 */   140,  110,  113,  140,    3,   72,   15,  107,  140,   64,
  350.  /*   880 */    64,   63,   13,   66,  140,    3,  140,   62,   62,   65,
  351.  /*   890 */     3,  140,   71,  140,  140,   13,   62,   62,   65,  140,
  352.  /*   900 */   140,  140,  115,  140,   64,   64,   63,  140,  140,  140,
  353.  /*   910 */   109,   75,   62,   62,   65,   64,   64,   63,   77,  140,
  354.  /*   920 */    64,   64,   63,   73,  140,   62,   62,   65,
  355.     );
  356.     static public $yy_lookahead = array(
  357.  /*     0 */     4,    1,    3,    2,    8,   58,   10,   60,   12,    2,
  358.  /*    10 */    14,   38,   16,    2,   18,    2,   20,   59,   22,   23,
  359.  /*    20 */    24,   25,   58,   27,   60,   29,   26,   31,   32,   33,
  360.  /*    30 */    34,   35,    4,   32,   33,   34,    8,   30,   10,   28,
  361.  /*    40 */    12,   59,   14,   30,   16,    1,   18,   19,   20,   51,
  362.  /*    50 */    22,   23,   24,   25,    2,   27,   59,   29,   43,   44,
  363.  /*    60 */    32,   33,   34,   35,   55,    4,   32,   33,   34,    8,
  364.  /*    70 */    44,   10,   65,   12,   65,   14,   59,   16,   59,   18,
  365.  /*    80 */    28,   20,   21,   22,   23,   24,   25,   65,   27,   65,
  366.  /*    90 */    29,   65,   65,   32,   33,   34,   35,   65,    4,   58,
  367.  /*   100 */    59,   60,    8,   65,   10,   65,   12,   65,   14,   65,
  368.  /*   110 */    16,   65,   18,   65,   20,   65,   22,   23,   24,   25,
  369.  /*   120 */    65,   27,   65,   29,   65,   65,   32,   33,   34,   35,
  370.  /*   130 */    36,    4,   58,   59,   60,    8,   65,   10,   65,   12,
  371.  /*   140 */    65,   14,   15,   16,   65,   18,   65,   20,   65,   22,
  372.  /*   150 */    23,   24,   25,   65,   27,   65,   29,   65,   65,   32,
  373.  /*   160 */    33,   34,   35,   65,    4,   32,   33,   34,    8,    9,
  374.  /*   170 */    10,   65,   12,   65,   14,   65,   16,   65,   18,   65,
  375.  /*   180 */    20,   65,   22,   23,   24,   25,   65,   27,   65,   29,
  376.  /*   190 */    65,   65,   32,   33,   34,   35,   65,    4,   63,   64,
  377.  /*   200 */    65,    8,   65,   10,   65,   12,   65,   14,   65,   16,
  378.  /*   210 */    65,   18,   65,   20,   65,   22,   23,   24,   25,   65,
  379.  /*   220 */    27,   65,   29,   65,   65,   32,   33,   34,   35,   65,
  380.  /*   230 */    37,    3,    4,   65,   65,   65,    8,   65,   10,   65,
  381.  /*   240 */    12,   65,   14,   65,   16,   65,   18,   65,   20,   65,
  382.  /*   250 */    22,   23,   24,   25,   65,   27,   65,   29,   65,   65,
  383.  /*   260 */    32,   33,   34,   35,   65,    4,   65,   65,   65,    8,
  384.  /*   270 */    65,   10,   65,   12,   13,   14,   65,   16,   65,   18,
  385.  /*   280 */    65,   20,   65,   22,   23,   24,   25,   65,   27,   65,
  386.  /*   290 */    29,   65,   65,   32,   33,   34,   35,   65,    4,   65,
  387.  /*   300 */    65,   65,    8,   65,   10,   11,   12,   65,   14,   65,
  388.  /*   310 */    16,   65,   18,   65,   20,   65,   22,   23,   24,   25,
  389.  /*   320 */    65,   27,   65,   29,   65,   65,   32,   33,   34,   35,
  390.  /*   330 */    65,    4,   65,   65,    2,    8,   65,   10,   65,   12,
  391.  /*   340 */    65,   14,   65,   16,   65,   18,   65,   20,   65,   22,
  392.  /*   350 */    23,   24,   25,   65,   27,   65,   29,   65,   31,   32,
  393.  /*   360 */    33,   34,   35,    4,   32,   33,   34,    8,   65,   10,
  394.  /*   370 */    65,   12,   65,   14,   65,   16,   65,   18,   65,   20,
  395.  /*   380 */    65,   22,   23,   24,   25,   65,   27,   65,   29,   65,
  396.  /*   390 */    31,   32,   33,   34,   35,    4,   65,   65,   65,    8,
  397.  /*   400 */    65,   10,   65,   12,   65,   14,   65,   16,   17,   18,
  398.  /*   410 */    65,   20,   65,   22,   23,   24,   25,   65,   27,   65,
  399.  /*   420 */    29,   65,   65,   32,   33,   34,   35,    3,    4,   65,
  400.  /*   430 */    65,   65,    8,   65,   10,   65,   12,   65,   14,   65,
  401.  /*   440 */    16,   65,   18,   65,   20,   65,   22,   23,   24,   25,
  402.  /*   450 */    65,   27,   65,   29,   65,   65,   32,   33,   34,   35,
  403.  /*   460 */    65,   40,   41,   42,   65,   65,   45,   46,   47,   48,
  404.  /*   470 */    49,   50,   65,   52,   53,   54,   65,   56,   57,    5,
  405.  /*   480 */     6,    7,   61,   62,   63,   64,   65,    4,   65,   65,
  406.  /*   490 */    65,    8,   65,   10,   65,   12,   65,   14,   65,   16,
  407.  /*   500 */    65,   18,   65,   20,   65,   22,   23,   24,   25,   65,
  408.  /*   510 */    27,   65,   29,   65,   65,   32,   33,   34,   35,   65,
  409.  /*   520 */     4,   65,   65,   65,    8,   65,   10,   65,   12,   65,
  410.  /*   530 */    14,   65,   16,   65,   18,   65,   20,   65,   22,   23,
  411.  /*   540 */    24,   25,   65,   27,   65,   29,   65,   65,   32,   33,
  412.  /*   550 */    34,   35,   46,   47,   48,   49,   50,   65,   52,   53,
  413.  /*   560 */    54,   65,   56,   57,    5,    6,    7,   61,   62,   63,
  414.  /*   570 */    64,   65,   45,   65,   47,   48,   49,   50,   65,   52,
  415.  /*   580 */    53,   54,   65,   56,   57,   65,   65,   65,   61,   62,
  416.  /*   590 */    65,   45,   65,   47,   48,   49,   50,   65,   52,   53,
  417.  /*   600 */    54,   65,   56,   57,   65,   65,   65,   61,   62,   45,
  418.  /*   610 */    65,   47,   48,   49,   50,   65,   52,   53,   54,   65,
  419.  /*   620 */    56,   57,   65,   65,   65,   61,   62,   45,   65,   47,
  420.  /*   630 */    48,   49,   50,   65,   52,   53,   54,   65,   56,   57,
  421.  /*   640 */    65,   65,   65,   61,   62,   45,   65,   47,   48,   49,
  422.  /*   650 */    50,   65,   52,   53,   54,   65,   56,   57,   65,   65,
  423.  /*   660 */    65,   61,   62,   45,   65,   47,   48,   49,   50,   65,
  424.  /*   670 */    52,   53,   54,   65,   56,   57,   65,   65,   65,   61,
  425.  /*   680 */    62,   45,   65,   47,   48,   49,   50,   65,   52,   53,
  426.  /*   690 */    54,   65,   56,   57,   65,   65,   65,   61,   62,   45,
  427.  /*   700 */    65,   47,   48,   49,   50,   65,   52,   53,   54,   65,
  428.  /*   710 */    56,   57,   65,   65,   65,   61,   62,   45,   65,   47,
  429.  /*   720 */    48,   49,   50,   65,   52,   53,   54,   65,   56,   57,
  430.  /*   730 */    65,   65,   65,   61,   62,   45,   65,   47,   48,   49,
  431.  /*   740 */    50,   65,   52,   53,   54,   65,   56,   57,   65,   65,
  432.  /*   750 */    65,   61,   62,   45,   65,   47,   48,   49,   50,   65,
  433.  /*   760 */    52,   53,   54,   65,   56,   57,   65,   65,   65,   61,
  434.  /*   770 */    62,   45,   65,   47,   48,   49,   50,   65,   52,   53,
  435.  /*   780 */    54,   65,   56,   57,   65,   65,   65,   61,   62,   45,
  436.  /*   790 */    65,   47,   48,   49,   50,   65,   52,   53,   54,   65,
  437.  /*   800 */    56,   57,   65,   65,   65,   61,   62,   45,   65,   47,
  438.  /*   810 */    48,   49,   50,   65,   52,   53,   54,   65,   56,   57,
  439.  /*   820 */    65,   65,   65,   61,   62,   45,   65,   47,   48,   49,
  440.  /*   830 */    50,   65,   52,   53,   54,   65,   56,   57,   65,   65,
  441.  /*   840 */    65,   61,   62,   45,   65,   47,   48,   49,   50,    2,
  442.  /*   850 */    52,   53,   54,   65,   56,   57,   65,    2,   65,   61,
  443.  /*   860 */    62,   65,   47,   48,   49,   50,    2,   52,   53,   54,
  444.  /*   870 */    65,   56,   57,   65,    2,   28,   61,   62,   65,   32,
  445.  /*   880 */    33,   34,    2,   28,   65,    2,   65,   32,   33,   34,
  446.  /*   890 */     2,   65,   28,   65,   65,    2,   32,   33,   34,   65,
  447.  /*   900 */    65,   65,   30,   65,   32,   33,   34,   65,   65,   65,
  448.  /*   910 */    30,   28,   32,   33,   34,   32,   33,   34,   30,   65,
  449.  /*   920 */    32,   33,   34,   30,   65,   32,   33,   34,
  450. );
  451.     const YY_SHIFT_USE_DFLT = -28;
  452.     const YY_SHIFT_MAX = 59;
  453.     static public $yy_shift_ofst = array(
  454.  /*     0 */   228,  424,  483,  483,  483,  483,  483,  483,  483,  483,
  455.  /*    10 */   483,  483,  483,  483,  483,  483,  483,  483,  359,  127,
  456.  /*    20 */    94,   61,  391,   -4,   28,  160,  193,  327,  294,  261,
  457.  /*    30 */   516,  516,  516,  516,  332,  332,    1,    1,   -1,   -1,
  458.  /*    40 */   -27,  883,  872,  847,  888,   34,  474,  -27,   44,  855,
  459.  /*    50 */   880,  893,  864,  133,  559,   13,   11,    0,    7,   52,
  460. );
  461.     const YY_REDUCE_USE_DFLT = -54;
  462.     const YY_REDUCE_MAX = 48;
  463.     static public $yy_reduce_ofst = array(
  464.  /*     0 */   421,  506,  600,  564,  636,  708,  618,  582,  546,  527,
  465.  /*    10 */   780,  672,  726,  744,  762,  654,  798,  690,  815,  815,
  466.  /*    20 */   815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
  467.  /*    30 */   815,  815,  815,  815,   41,   74,  -36,  -53,  135,  135,
  468.  /*    40 */    15,  -42,   17,   19,   -3,  -18,   -2,   26,    9,
  469. );
  470.     static public $yyExpectedTokens = array(
  471.         /* 0 */ array(34810121416182022232425272932333435),
  472.         /* 1 */ array(34810121416182022232425272932333435),
  473.         /* 2 */ array(4810121416182022232425272932333435),
  474.         /* 3 */ array(4810121416182022232425272932333435),
  475.         /* 4 */ array(4810121416182022232425272932333435),
  476.         /* 5 */ array(4810121416182022232425272932333435),
  477.         /* 6 */ array(4810121416182022232425272932333435),
  478.         /* 7 */ array(4810121416182022232425272932333435),
  479.         /* 8 */ array(4810121416182022232425272932333435),
  480.         /* 9 */ array(4810121416182022232425272932333435),
  481.         /* 10 */ array(4810121416182022232425272932333435),
  482.         /* 11 */ array(4810121416182022232425272932333435),
  483.         /* 12 */ array(4810121416182022232425272932333435),
  484.         /* 13 */ array(4810121416182022232425272932333435),
  485.         /* 14 */ array(4810121416182022232425272932333435),
  486.         /* 15 */ array(4810121416182022232425272932333435),
  487.         /* 16 */ array(4810121416182022232425272932333435),
  488.         /* 17 */ array(4810121416182022232425272932333435),
  489.         /* 18 */ array(481012141618202223242527293132333435),
  490.         /* 19 */ array(481012141516182022232425272932333435),
  491.         /* 20 */ array(481012141618202223242527293233343536),
  492.         /* 21 */ array(481012141618202122232425272932333435),
  493.         /* 22 */ array(481012141617182022232425272932333435),
  494.         /* 23 */ array(481012141618202223242527293132333435),
  495.         /* 24 */ array(481012141618192022232425272932333435),
  496.         /* 25 */ array(48910121416182022232425272932333435),
  497.         /* 26 */ array(481012141618202223242527293233343537),
  498.         /* 27 */ array(481012141618202223242527293132333435),
  499.         /* 28 */ array(481011121416182022232425272932333435),
  500.         /* 29 */ array(481012131416182022232425272932333435),
  501.         /* 30 */ array(4810121416182022232425272932333435),
  502.         /* 31 */ array(4810121416182022232425272932333435),
  503.         /* 32 */ array(4810121416182022232425272932333435),
  504.         /* 33 */ array(4810121416182022232425272932333435),
  505.         /* 34 */ array(2323334),
  506.         /* 35 */ array(2323334),
  507.         /* 36 */ array(2323334),
  508.         /* 37 */ array(2323334),
  509.         /* 38 */ array(3),
  510.         /* 39 */ array(3),
  511.         /* 40 */ array(38),
  512.         /* 41 */ array(228323334),
  513.         /* 42 */ array(230323334),
  514.         /* 43 */ array(228323334),
  515.         /* 44 */ array(230323334),
  516.         /* 45 */ array(323334),
  517.         /* 46 */ array(567),
  518.         /* 47 */ array(38),
  519.         /* 48 */ array(1),
  520.         /* 49 */ array(228323334),
  521.         /* 50 */ array(230323334),
  522.         /* 51 */ array(230323334),
  523.         /* 52 */ array(228323334),
  524.         /* 53 */ array(323334),
  525.         /* 54 */ array(567),
  526.         /* 55 */ array(230),
  527.         /* 56 */ array(228),
  528.         /* 57 */ array(126),
  529.         /* 58 */ array(230),
  530.         /* 59 */ array(228),
  531.         /* 60 */ array(),
  532.         /* 61 */ array(),
  533.         /* 62 */ array(),
  534.         /* 63 */ array(),
  535.         /* 64 */ array(),
  536.         /* 65 */ array(),
  537.         /* 66 */ array(),
  538.         /* 67 */ array(),
  539.         /* 68 */ array(),
  540.         /* 69 */ array(),
  541.         /* 70 */ array(),
  542.         /* 71 */ array(),
  543.         /* 72 */ array(),
  544.         /* 73 */ array(),
  545.         /* 74 */ array(),
  546.         /* 75 */ array(),
  547.         /* 76 */ array(),
  548.         /* 77 */ array(),
  549.         /* 78 */ array(),
  550.         /* 79 */ array(),
  551.         /* 80 */ array(),
  552.         /* 81 */ array(),
  553.         /* 82 */ array(),
  554.         /* 83 */ array(),
  555.         /* 84 */ array(),
  556.         /* 85 */ array(),
  557.         /* 86 */ array(),
  558.         /* 87 */ array(),
  559.         /* 88 */ array(),
  560.         /* 89 */ array(),
  561.         /* 90 */ array(),
  562.         /* 91 */ array(),
  563.         /* 92 */ array(),
  564.         /* 93 */ array(),
  565.         /* 94 */ array(),
  566.         /* 95 */ array(),
  567.         /* 96 */ array(),
  568.         /* 97 */ array(),
  569.         /* 98 */ array(),
  570.         /* 99 */ array(),
  571.         /* 100 */ array(),
  572.         /* 101 */ array(),
  573.         /* 102 */ array(),
  574.         /* 103 */ array(),
  575.         /* 104 */ array(),
  576.         /* 105 */ array(),
  577.         /* 106 */ array(),
  578.         /* 107 */ array(),
  579.         /* 108 */ array(),
  580.         /* 109 */ array(),
  581.         /* 110 */ array(),
  582.         /* 111 */ array(),
  583.         /* 112 */ array(),
  584.         /* 113 */ array(),
  585.         /* 114 */ array(),
  586.         /* 115 */ array(),
  587.         /* 116 */ array(),
  588.         /* 117 */ array(),
  589.         /* 118 */ array(),
  590. );
  591.     static public $yy_default = array(
  592.  /*     0 */   127,  124,  192,  192,  192,  192,  192,  192,  192,  192,
  593.  /*    10 */   192,  192,  191,  192,  192,  192,  192,  192,  192,  192,
  594.  /*    20 */   192,  192,  192,  167,  192,  192,  192,  192,  192,  192,
  595.  /*    30 */   166,  150,  151,  190,  192,  192,  192,  192,  125,  126,
  596.  /*    40 */   121,  192,  192,  192,  192,  180,  192,  120,  192,  192,
  597.  /*    50 */   192,  192,  192,  181,  192,  192,  192,  192,  192,  192,
  598.  /*    60 */   168,  170,  171,  174,  173,  172,  159,  123,  177,  179,
  599.  /*    70 */   178,  158,  156,  164,  155,  157,  189,  162,  161,  140,
  600.  /*    80 */   139,  138,  137,  141,  142,  145,  144,  143,  136,  135,
  601.  /*    90 */   129,  128,  122,  130,  131,  132,  134,  133,  146,  147,
  602.  /*   100 */   182,  176,  175,  183,  184,  187,  186,  185,  169,  165,
  603.  /*   110 */   152,  149,  148,  153,  154,  163,  119,  160,  188,
  604. );
  605. /* The next thing included is series of defines which control
  606. ** various aspects of the generated parser.
  607. **    self::YYNOCODE      is a number which corresponds
  608. **                        to no legal terminal or nonterminal number.  This
  609. **                        number is used to fill in empty slots of the hash 
  610. **                        table.
  611. **    self::YYFALLBACK    If defined, this indicates that one or more tokens
  612. **                        have fall-back values which should be used if the
  613. **                        original value of the token will not parse.
  614. **    self::YYSTACKDEPTH  is the maximum depth of the parser's stack.
  615. **    self::YYNSTATE      the combined number of states.
  616. **    self::YYNRULE       the number of rules in the grammar
  617. **    self::YYERRORSYMBOL is the code number of the error symbol.  If not
  618. **                        defined, then do no error processing.
  619. */
  620.     const YYNOCODE = 66;
  621.     const YYSTACKDEPTH = 100;
  622.     const YYNSTATE = 119;
  623.     const YYNRULE = 73;
  624.     const YYERRORSYMBOL = 39;
  625.     const YYERRSYMDT = 'yy0';
  626.     const YYFALLBACK = 0;
  627.     /** The next table maps tokens into fallback tokens.  If a construct
  628.      * like the following:
  629.      * 
  630.      *      %fallback ID X Y Z.
  631.      *
  632.      * appears in the grammer, then ID becomes a fallback token for X, Y,
  633.      * and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
  634.      * but it does not parse, the type of the token is changed to ID and
  635.      * the parse is retried before an error is thrown.
  636.      */
  637.     static public $yyFallback = array(
  638.     );
  639.     /**
  640.      * Turn parser tracing on by giving a stream to which to write the trace
  641.      * and a prompt to preface each trace message.  Tracing is turned off
  642.      * by making either argument NULL
  643.      *
  644.      * Inputs:
  645.      * 
  646.      * - A stream resource to which trace output should be written.
  647.      *   If NULL, then tracing is turned off.
  648.      * - A prefix string written at the beginning of every
  649.      *   line of trace output.  If NULL, then tracing is
  650.      *   turned off.
  651.      *
  652.      * Outputs:
  653.      * 
  654.      * - None.
  655.      * @param resource 
  656.      * @param string 
  657.      */
  658.     static function Trace($TraceFILE$zTracePrompt)
  659.     {
  660.         if (!$TraceFILE{
  661.             $zTracePrompt = 0;
  662.         elseif (!$zTracePrompt{
  663.             $TraceFILE = 0;
  664.         }
  665.         self::$yyTraceFILE $TraceFILE;
  666.         self::$yyTracePrompt $zTracePrompt;
  667.     }
  668.  
  669.     /**
  670.      * Output debug information to output (php://output stream)
  671.      */
  672.     static function PrintTrace()
  673.     {
  674.         self::$yyTraceFILE = fopen('php://output''w');
  675.         self::$yyTracePrompt '';
  676.     }
  677.  
  678.     /**
  679.      * @var resource|0
  680.      */
  681.     static public $yyTraceFILE;
  682.     /**
  683.      * String to prepend to debug output
  684.      * @var string|0
  685.      */
  686.     static public $yyTracePrompt;
  687.     /**
  688.      * @var int 
  689.      */
  690.     public $yyidx;                    /* Index of top element in stack */
  691.     /**
  692.      * @var int 
  693.      */
  694.     public $yyerrcnt;                 /* Shifts left before out of the error */
  695.     /**
  696.      * @var array 
  697.      */
  698.     public $yystack = array();  /* The parser's stack */
  699.  
  700.     /**
  701.      * For tracing shifts, the names of all terminals and nonterminals
  702.      * are required.  The following table supplies these names
  703.      * @var array 
  704.      */
  705.     static public $yyTokenName = array
  706.   '$',             'DOCBLOCK_SIMPLELISTBULLET',  'DOCBLOCK_LIOPEN',  'DOCBLOCK_POPEN',
  707.   'DOCBLOCK_INLINETAG',  'DOCBLOCK_ENDINLINETAG',  'DOCBLOCK_INLINETAGCONTENTS',  'DOCBLOCK_ESCAPEDINLINEEND',
  708.   'DOCBLOCK_BOPEN',  'DOCBLOCK_BCLOSE',  'DOCBLOCK_IOPEN',  'DOCBLOCK_ICLOSE',
  709.   'DOCBLOCK_CODEOPEN',  'DOCBLOCK_CODECLOSE',  'DOCBLOCK_PREOPEN',  'DOCBLOCK_PRECLOSE',
  710.   'DOCBLOCK_SAMPOPEN',  'DOCBLOCK_SAMPCLOSE',  'DOCBLOCK_VAROPEN',  'DOCBLOCK_VARCLOSE',
  711.   'DOCBLOCK_KBDOPEN',  'DOCBLOCK_KBDCLOSE',  'DOCBLOCK_BR',   'DOCBLOCK_ESCAPEDHTML',
  712.   'DOCBLOCK_ESCAPEDINLINETAG',  'DOCBLOCK_SIMPLELISTSTART',  'DOCBLOCK_SIMPLELISTEND',  'DOCBLOCK_OLOPEN',
  713.   'DOCBLOCK_OLCLOSE',  'DOCBLOCK_ULOPEN',  'DOCBLOCK_ULCLOSE',  'DOCBLOCK_LICLOSE',
  714.   'DOCBLOCK_NEWLINE',  'DOCBLOCK_WHITESPACE',  'DOCBLOCK_TEXT',  'DOCBLOCK_INTERNAL',
  715.   'DOCBLOCK_ENDINTERNAL',  'DOCBLOCK_PCLOSE',  'DOCBLOCK_TAG',  'error',       
  716.   'start',         'docblock',      'description',   'tags',        
  717.   'tag',           'text',          'paragraphs',    'special',     
  718.   'html_tag',      'inline_tag',    'list',          'inline_tag_contents',
  719.   'escape',        'simple_list',   'html_list',     'simplelist_contents',
  720.   'ordered_list',  'unordered_list',  'htmllist_contents',  'ignored_whitespace',
  721.   'htmllist_contents_close',  'stopinternal',  'internal',      'paragraph',   
  722.   'nonestingp',  
  723.     );
  724.  
  725.     /**
  726.      * For tracing reduce actions, the names of all rules are required.
  727.      * @var array 
  728.      */
  729.     static public $yyRuleName = array(
  730.  /*   0 */ "start ::= docblock",
  731.  /*   1 */ "docblock ::= description tags",
  732.  /*   2 */ "docblock ::= description",
  733.  /*   3 */ "tags ::= tags tag",
  734.  /*   4 */ "tags ::= tag",
  735.  /*   5 */ "description ::= text",
  736.  /*   6 */ "description ::= paragraphs",
  737.  /*   7 */ "description ::= text paragraphs",
  738.  /*   8 */ "description ::=",
  739.  /*   9 */ "special ::= html_tag",
  740.  /*  10 */ "special ::= inline_tag",
  741.  /*  11 */ "special ::= list",
  742.  /*  12 */ "inline_tag ::= DOCBLOCK_INLINETAG inline_tag_contents DOCBLOCK_ENDINLINETAG",
  743.  /*  13 */ "inline_tag ::= DOCBLOCK_INLINETAG DOCBLOCK_ENDINLINETAG",
  744.  /*  14 */ "inline_tag_contents ::= inline_tag_contents DOCBLOCK_INLINETAGCONTENTS",
  745.  /*  15 */ "inline_tag_contents ::= inline_tag_contents DOCBLOCK_ESCAPEDINLINEEND",
  746.  /*  16 */ "inline_tag_contents ::= DOCBLOCK_INLINETAGCONTENTS",
  747.  /*  17 */ "inline_tag_contents ::= DOCBLOCK_ESCAPEDINLINEEND",
  748.  /*  18 */ "html_tag ::= DOCBLOCK_BOPEN text DOCBLOCK_BCLOSE",
  749.  /*  19 */ "html_tag ::= DOCBLOCK_IOPEN text DOCBLOCK_ICLOSE",
  750.  /*  20 */ "html_tag ::= DOCBLOCK_CODEOPEN text DOCBLOCK_CODECLOSE",
  751.  /*  21 */ "html_tag ::= DOCBLOCK_PREOPEN text DOCBLOCK_PRECLOSE",
  752.  /*  22 */ "html_tag ::= DOCBLOCK_SAMPOPEN text DOCBLOCK_SAMPCLOSE",
  753.  /*  23 */ "html_tag ::= DOCBLOCK_VAROPEN text DOCBLOCK_VARCLOSE",
  754.  /*  24 */ "html_tag ::= DOCBLOCK_KBDOPEN text DOCBLOCK_KBDCLOSE",
  755.  /*  25 */ "html_tag ::= DOCBLOCK_BR",
  756.  /*  26 */ "escape ::= DOCBLOCK_ESCAPEDHTML",
  757.  /*  27 */ "escape ::= DOCBLOCK_ESCAPEDINLINETAG",
  758.  /*  28 */ "list ::= simple_list",
  759.  /*  29 */ "list ::= html_list",
  760.  /*  30 */ "simple_list ::= DOCBLOCK_SIMPLELISTSTART simplelist_contents DOCBLOCK_SIMPLELISTEND",
  761.  /*  31 */ "simplelist_contents ::= simplelist_contents DOCBLOCK_SIMPLELISTBULLET text",
  762.  /*  32 */ "simplelist_contents ::= DOCBLOCK_SIMPLELISTBULLET text",
  763.  /*  33 */ "html_list ::= ordered_list",
  764.  /*  34 */ "html_list ::= unordered_list",
  765.  /*  35 */ "ordered_list ::= DOCBLOCK_OLOPEN htmllist_contents DOCBLOCK_OLCLOSE",
  766.  /*  36 */ "ordered_list ::= DOCBLOCK_OLOPEN ignored_whitespace htmllist_contents DOCBLOCK_OLCLOSE",
  767.  /*  37 */ "ordered_list ::= DOCBLOCK_OLOPEN htmllist_contents_close DOCBLOCK_OLCLOSE",
  768.  /*  38 */ "ordered_list ::= DOCBLOCK_OLOPEN ignored_whitespace htmllist_contents_close DOCBLOCK_OLCLOSE",
  769.  /*  39 */ "ordered_list ::= DOCBLOCK_OLOPEN htmllist_contents_close ignored_whitespace DOCBLOCK_OLCLOSE",
  770.  /*  40 */ "ordered_list ::= DOCBLOCK_OLOPEN ignored_whitespace htmllist_contents_close ignored_whitespace DOCBLOCK_OLCLOSE",
  771.  /*  41 */ "unordered_list ::= DOCBLOCK_ULOPEN htmllist_contents DOCBLOCK_ULCLOSE",
  772.  /*  42 */ "unordered_list ::= DOCBLOCK_ULOPEN ignored_whitespace htmllist_contents DOCBLOCK_ULCLOSE",
  773.  /*  43 */ "unordered_list ::= DOCBLOCK_ULOPEN htmllist_contents_close DOCBLOCK_ULCLOSE",
  774.  /*  44 */ "unordered_list ::= DOCBLOCK_ULOPEN ignored_whitespace htmllist_contents_close DOCBLOCK_ULCLOSE",
  775.  /*  45 */ "unordered_list ::= DOCBLOCK_ULOPEN htmllist_contents_close ignored_whitespace DOCBLOCK_ULCLOSE",
  776.  /*  46 */ "unordered_list ::= DOCBLOCK_ULOPEN ignored_whitespace htmllist_contents_close ignored_whitespace DOCBLOCK_ULCLOSE",
  777.  /*  47 */ "htmllist_contents ::= htmllist_contents DOCBLOCK_LIOPEN text",
  778.  /*  48 */ "htmllist_contents ::= DOCBLOCK_LIOPEN text",
  779.  /*  49 */ "htmllist_contents_close ::= htmllist_contents_close DOCBLOCK_LIOPEN text DOCBLOCK_LICLOSE",
  780.  /*  50 */ "htmllist_contents_close ::= htmllist_contents_close ignored_whitespace DOCBLOCK_LIOPEN text DOCBLOCK_LICLOSE",
  781.  /*  51 */ "htmllist_contents_close ::= DOCBLOCK_LIOPEN text DOCBLOCK_LICLOSE",
  782.  /*  52 */ "ignored_whitespace ::= ignored_whitespace DOCBLOCK_NEWLINE|DOCBLOCK_WHITESPACE",
  783.  /*  53 */ "ignored_whitespace ::= ignored_whitespace DOCBLOCK_TEXT",
  784.  /*  54 */ "ignored_whitespace ::= DOCBLOCK_NEWLINE|DOCBLOCK_WHITESPACE",
  785.  /*  55 */ "ignored_whitespace ::= DOCBLOCK_TEXT",
  786.  /*  56 */ "stopinternal ::= DOCBLOCK_INTERNAL",
  787.  /*  57 */ "internal ::= stopinternal text DOCBLOCK_ENDINTERNAL",
  788.  /*  58 */ "paragraphs ::= paragraphs paragraph",
  789.  /*  59 */ "paragraphs ::= paragraph",
  790.  /*  60 */ "nonestingp ::= DOCBLOCK_POPEN",
  791.  /*  61 */ "paragraph ::= nonestingp text DOCBLOCK_PCLOSE",
  792.  /*  62 */ "paragraph ::= nonestingp text DOCBLOCK_PCLOSE ignored_whitespace",
  793.  /*  63 */ "text ::= text DOCBLOCK_NEWLINE|DOCBLOCK_WHITESPACE|DOCBLOCK_TEXT",
  794.  /*  64 */ "text ::= text escape",
  795.  /*  65 */ "text ::= text special",
  796.  /*  66 */ "text ::= text internal",
  797.  /*  67 */ "text ::= DOCBLOCK_NEWLINE|DOCBLOCK_WHITESPACE|DOCBLOCK_TEXT",
  798.  /*  68 */ "text ::= escape",
  799.  /*  69 */ "text ::= special",
  800.  /*  70 */ "text ::= internal",
  801.  /*  71 */ "tag ::= DOCBLOCK_TAG text",
  802.  /*  72 */ "tag ::= DOCBLOCK_TAG",
  803.     );
  804.  
  805.     /**
  806.      * This function returns the symbolic name associated with a token
  807.      * value.
  808.      * @param int 
  809.      * @return string 
  810.      */
  811.     function tokenName($tokenType)
  812.     {
  813.         if ($tokenType === 0{
  814.             return 'End of Input';
  815.         }
  816.         if ($tokenType > 0 && $tokenType < count(self::$yyTokenName)) {
  817.             return self::$yyTokenName[$tokenType];
  818.         else {
  819.             return "Unknown";
  820.         }
  821.     }
  822.  
  823.     /**
  824.      * The following function deletes the value associated with a
  825.      * symbol.  The symbol can be either a terminal or nonterminal.
  826.      * @param int the symbol code
  827.      * @param mixed the symbol's value
  828.      */
  829.     static function yy_destructor($yymajor$yypminor)
  830.     {
  831.         switch ($yymajor{
  832.         /* Here is inserted the actions which take place when a
  833.         ** terminal or non-terminal is destroyed.  This can happen
  834.         ** when the symbol is popped from the stack during a
  835.         ** reduce or during error processing or when a parser is 
  836.         ** being destroyed before it is finished parsing.
  837.         **
  838.         ** Note: during a reduce, the only symbols destroyed are those
  839.         ** which appear on the RHS of the rule, but which are not used
  840.         ** inside the C code.
  841.         */
  842.             default:  break;   /* If no destructor action specified: do nothing */
  843.         }
  844.     }
  845.  
  846.     /**
  847.      * Pop the parser's stack once.
  848.      *
  849.      * If there is a destructor routine associated with the token which
  850.      * is popped from the stack, then call it.
  851.      *
  852.      * Return the major token number for the symbol popped.
  853.      * @param PHP_Parser_DocblockParseryyParser 
  854.      * @return int 
  855.      */
  856.     function yy_pop_parser_stack()
  857.     {
  858.         if (!count($this->yystack)) {
  859.             return;
  860.         }
  861.         $yytos array_pop($this->yystack);
  862.         if (self::$yyTraceFILE && $this->yyidx >= 0{
  863.             fwrite(self::$yyTraceFILE,
  864.                 self::$yyTracePrompt 'Popping ' . self::$yyTokenName[$yytos->major.
  865.                     "\n");
  866.         }
  867.         $yymajor $yytos->major;
  868.         self::yy_destructor($yymajor$yytos->minor);
  869.         $this->yyidx--;
  870.         return $yymajor;
  871.     }
  872.  
  873.     /**
  874.      * Deallocate and destroy a parser.  Destructors are all called for
  875.      * all stack elements before shutting the parser down.
  876.      */
  877.     function __destruct()
  878.     {
  879.         while ($this->yyidx >= 0{
  880.             $this->yy_pop_parser_stack();
  881.         }
  882.         if (is_resource(self::$yyTraceFILE)) {
  883.             fclose(self::$yyTraceFILE);
  884.         }
  885.     }
  886.  
  887.     /**
  888.      * Based on the current state and parser stack, get a list of all
  889.      * possible lookahead tokens
  890.      * @param int 
  891.      * @return array 
  892.      */
  893.     function yy_get_expected_tokens($token)
  894.     {
  895.         $state $this->yystack[$this->yyidx]->stateno;
  896.         $expected = self::$yyExpectedTokens[$state];
  897.         if (in_array($tokenself::$yyExpectedTokens[$state]true)) {
  898.             return $expected;
  899.         }
  900.         $stack $this->yystack;
  901.         $yyidx $this->yyidx;
  902.         do {
  903.             $yyact $this->yy_find_shift_action($token);
  904.             if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE{
  905.                 // reduce action
  906.                 $done = 0;
  907.                 do {
  908.                     if ($done++ == 100{
  909.                         $this->yyidx $yyidx;
  910.                         $this->yystack $stack;
  911.                         // too much recursion prevents proper detection
  912.                         // so give up
  913.                         return array_unique($expected);
  914.                     }
  915.                     $yyruleno $yyact - self::YYNSTATE;
  916.                     $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
  917.                     $nextstate $this->yy_find_reduce_action(
  918.                         $this->yystack[$this->yyidx]->stateno,
  919.                         self::$yyRuleInfo[$yyruleno]['lhs']);
  920.                     if (isset(self::$yyExpectedTokens[$nextstate])) {
  921.                         $expected += self::$yyExpectedTokens[$nextstate];
  922.                             if (in_array($token,
  923.                                   self::$yyExpectedTokens[$nextstate]true)) {
  924.                             $this->yyidx $yyidx;
  925.                             $this->yystack $stack;
  926.                             return array_unique($expected);
  927.                         }
  928.                     }
  929.                     if ($nextstate < self::YYNSTATE{
  930.                         // we need to shift a non-terminal
  931.                         $this->yyidx++;
  932.                         $x = new PHP_Parser_DocblockParseryyStackEntry;
  933.                         $x->stateno = $nextstate;
  934.                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
  935.                         $this->yystack[$this->yyidx$x;
  936.                         continue 2;
  937.                     elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1{
  938.                         $this->yyidx $yyidx;
  939.                         $this->yystack $stack;
  940.                         // the last token was just ignored, we can't accept
  941.                         // by ignoring input, this is in essence ignoring a
  942.                         // syntax error!
  943.                         return array_unique($expected);
  944.                     elseif ($nextstate === self::YY_NO_ACTION{
  945.                         $this->yyidx $yyidx;
  946.                         $this->yystack $stack;
  947.                         // input accepted, but not shifted (I guess)
  948.                         return $expected;
  949.                     else {
  950.                         $yyact $nextstate;
  951.                     }
  952.                 while (true);
  953.             }
  954.             break;
  955.         while (true);
  956.         return array_unique($expected);
  957.     }
  958.  
  959.     /**
  960.      * Based on the parser state and current parser stack, determine whether
  961.      * the lookahead token is possible.
  962.      * 
  963.      * The parser will convert the token value to an error token if not.  This
  964.      * catches some unusual edge cases where the parser would fail.
  965.      * @param int 
  966.      * @return bool 
  967.      */
  968.     function yy_is_expected_token($token)
  969.     {
  970.         if ($token === 0{
  971.             return true; // 0 is not part of this
  972.         }
  973.         $state $this->yystack[$this->yyidx]->stateno;
  974.         if (in_array($tokenself::$yyExpectedTokens[$state]true)) {
  975.             return true;
  976.         }
  977.         $stack $this->yystack;
  978.         $yyidx $this->yyidx;
  979.         do {
  980.             $yyact $this->yy_find_shift_action($token);
  981.             if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE{
  982.                 // reduce action
  983.                 $done = 0;
  984.                 do {
  985.                     if ($done++ == 100{
  986.                         $this->yyidx $yyidx;
  987.                         $this->yystack $stack;
  988.                         // too much recursion prevents proper detection
  989.                         // so give up
  990.                         return true;
  991.                     }
  992.                     $yyruleno $yyact - self::YYNSTATE;
  993.                     $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
  994.                     $nextstate $this->yy_find_reduce_action(
  995.                         $this->yystack[$this->yyidx]->stateno,
  996.                         self::$yyRuleInfo[$yyruleno]['lhs']);
  997.                     if (isset(self::$yyExpectedTokens[$nextstate]&&
  998.                           in_array($tokenself::$yyExpectedTokens[$nextstate]true)) {
  999.                         $this->yyidx $yyidx;
  1000.                         $this->yystack $stack;
  1001.                         return true;
  1002.                     }
  1003.                     if ($nextstate < self::YYNSTATE{
  1004.                         // we need to shift a non-terminal
  1005.                         $this->yyidx++;
  1006.                         $x = new PHP_Parser_DocblockParseryyStackEntry;
  1007.                         $x->stateno = $nextstate;
  1008.                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
  1009.                         $this->yystack[$this->yyidx$x;
  1010.                         continue 2;
  1011.                     elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1{
  1012.                         $this->yyidx $yyidx;
  1013.                         $this->yystack $stack;
  1014.                         if (!$token{
  1015.                             // end of input: this is valid
  1016.                             return true;
  1017.                         }
  1018.                         // the last token was just ignored, we can't accept
  1019.                         // by ignoring input, this is in essence ignoring a
  1020.                         // syntax error!
  1021.                         return false;
  1022.                     elseif ($nextstate === self::YY_NO_ACTION{
  1023.                         $this->yyidx $yyidx;
  1024.                         $this->yystack $stack;
  1025.                         // input accepted, but not shifted (I guess)
  1026.                         return true;
  1027.                     else {
  1028.                         $yyact $nextstate;
  1029.                     }
  1030.                 while (true);
  1031.             }
  1032.             break;
  1033.         while (true);
  1034.         $this->yyidx $yyidx;
  1035.         $this->yystack $stack;
  1036.         return true;
  1037.     }
  1038.  
  1039.     /**
  1040.      * Find the appropriate action for a parser given the terminal
  1041.      * look-ahead token iLookAhead.
  1042.      *
  1043.      * If the look-ahead token is YYNOCODE, then check to see if the action is
  1044.      * independent of the look-ahead.  If it is, return the action, otherwise
  1045.      * return YY_NO_ACTION.
  1046.      * @param int The look-ahead token
  1047.      */
  1048.     function yy_find_shift_action($iLookAhead)
  1049.     {
  1050.         $stateno $this->yystack[$this->yyidx]->stateno;
  1051.      
  1052.         /* if ($this->yyidx < 0) return self::YY_NO_ACTION;  */
  1053.         if (!isset(self::$yy_shift_ofst[$stateno])) {
  1054.             // no shift actions
  1055.             return self::$yy_default[$stateno];
  1056.         }
  1057.         $i = self::$yy_shift_ofst[$stateno];
  1058.         if ($i === self::YY_SHIFT_USE_DFLT{
  1059.             return self::$yy_default[$stateno];
  1060.         }
  1061.         if ($iLookAhead == self::YYNOCODE{
  1062.             return self::YY_NO_ACTION;
  1063.         }
  1064.         $i += $iLookAhead;
  1065.         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
  1066.               self::$yy_lookahead[$i!= $iLookAhead{
  1067.             if (count(self::$yyFallback&& $iLookAhead < count(self::$yyFallback)
  1068.                    && ($iFallback = self::$yyFallback[$iLookAhead]!= 0{
  1069.                 if (self::$yyTraceFILE{
  1070.                     fwrite(self::$yyTraceFILEself::$yyTracePrompt "FALLBACK " .
  1071.                         self::$yyTokenName[$iLookAhead" => " .
  1072.                         self::$yyTokenName[$iFallback"\n");
  1073.                 }
  1074.                 return $this->yy_find_shift_action($iFallback);
  1075.             }
  1076.             return self::$yy_default[$stateno];
  1077.         else {
  1078.             return self::$yy_action[$i];
  1079.         }
  1080.     }
  1081.  
  1082.     /**
  1083.      * Find the appropriate action for a parser given the non-terminal
  1084.      * look-ahead token $iLookAhead.
  1085.      *
  1086.      * If the look-ahead token is self::YYNOCODE, then check to see if the action is
  1087.      * independent of the look-ahead.  If it is, return the action, otherwise
  1088.      * return self::YY_NO_ACTION.
  1089.      * @param int Current state number
  1090.      * @param int The look-ahead token
  1091.      */
  1092.     function yy_find_reduce_action($stateno$iLookAhead)
  1093.     {
  1094.         /* $stateno = $this->yystack[$this->yyidx]->stateno; */
  1095.  
  1096.         if (!isset(self::$yy_reduce_ofst[$stateno])) {
  1097.             return self::$yy_default[$stateno];
  1098.         }
  1099.         $i = self::$yy_reduce_ofst[$stateno];
  1100.         if ($i == self::YY_REDUCE_USE_DFLT{
  1101.             return self::$yy_default[$stateno];
  1102.         }
  1103.         if ($iLookAhead == self::YYNOCODE{
  1104.             return self::YY_NO_ACTION;
  1105.         }
  1106.         $i += $iLookAhead;
  1107.         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
  1108.               self::$yy_lookahead[$i!= $iLookAhead{
  1109.             return self::$yy_default[$stateno];
  1110.         else {
  1111.             return self::$yy_action[$i];
  1112.         }
  1113.     }
  1114.  
  1115.     /**
  1116.      * Perform a shift action.
  1117.      * @param int The new state to shift in
  1118.      * @param int The major token to shift in
  1119.      * @param mixed the minor token to shift in
  1120.      */
  1121.     function yy_shift($yyNewState$yyMajor$yypMinor)
  1122.     {
  1123.         $this->yyidx++;
  1124.         if ($this->yyidx >= self::YYSTACKDEPTH{
  1125.             $this->yyidx--;
  1126.             if (self::$yyTraceFILE{
  1127.                 fprintf(self::$yyTraceFILE"%sStack Overflow!\n"self::$yyTracePrompt);
  1128.             }
  1129.             while ($this->yyidx >= 0{
  1130.                 $this->yy_pop_parser_stack();
  1131.             }
  1132.             /* Here code is inserted which will execute if the parser
  1133.             ** stack ever overflows */
  1134.             return;
  1135.         }
  1136.         $yytos = new PHP_Parser_DocblockParseryyStackEntry;
  1137.         $yytos->stateno = $yyNewState;
  1138.         $yytos->major = $yyMajor;
  1139.         $yytos->minor = $yypMinor;
  1140.         array_push($this->yystack$yytos);
  1141.         if (self::$yyTraceFILE && $this->yyidx > 0{
  1142.             fprintf(self::$yyTraceFILE"%sShift %d\n"self::$yyTracePrompt,
  1143.                 $yyNewState);
  1144.             fprintf(self::$yyTraceFILE"%sStack:"self::$yyTracePrompt);
  1145.             for($i = 1; $i <= $this->yyidx$i++{
  1146.                 fprintf(self::$yyTraceFILE" %s",
  1147.                     self::$yyTokenName[$this->yystack[$i]->major]);
  1148.             }
  1149.             fwrite(self::$yyTraceFILE,"\n");
  1150.         }
  1151.     }
  1152.  
  1153.     /**
  1154.      * The following table contains information about every rule that
  1155.      * is used during the reduce.
  1156.      *
  1157.      * <pre>
  1158.      * array(
  1159.      *  array(
  1160.      *   int $lhs;         Symbol on the left-hand side of the rule
  1161.      *   int $nrhs;     Number of right-hand side symbols in the rule
  1162.      *  ),...
  1163.      * );
  1164.      * </pre>
  1165.      */
  1166.     static public $yyRuleInfo = array(
  1167.   array'lhs' => 40'rhs' => 1 ),
  1168.   array'lhs' => 41'rhs' => 2 ),
  1169.   array'lhs' => 41'rhs' => 1 ),
  1170.   array'lhs' => 43'rhs' => 2 ),
  1171.   array'lhs' => 43'rhs' => 1 ),
  1172.   array'lhs' => 42'rhs' => 1 ),
  1173.   array'lhs' => 42'rhs' => 1 ),
  1174.   array'lhs' => 42'rhs' => 2 ),
  1175.   array'lhs' => 42'rhs' => 0 ),
  1176.   array'lhs' => 47'rhs' => 1 ),
  1177.   array'lhs' => 47'rhs' => 1 ),
  1178.   array'lhs' => 47'rhs' => 1 ),
  1179.   array'lhs' => 49'rhs' => 3 ),
  1180.   array'lhs' => 49'rhs' => 2 ),
  1181.   array'lhs' => 51'rhs' => 2 ),
  1182.   array'lhs' => 51'rhs' => 2 ),
  1183.   array'lhs' => 51'rhs' => 1 ),
  1184.   array'lhs' => 51'rhs' => 1 ),
  1185.   array'lhs' => 48'rhs' => 3 ),
  1186.   array'lhs' => 48'rhs' => 3 ),
  1187.   array'lhs' => 48'rhs' => 3 ),
  1188.   array'lhs' => 48'rhs' => 3 ),
  1189.   array'lhs' => 48'rhs' => 3 ),
  1190.   array'lhs' => 48'rhs' => 3 ),
  1191.   array'lhs' => 48'rhs' => 3 ),
  1192.   array'lhs' => 48'rhs' => 1 ),
  1193.   array'lhs' => 52'rhs' => 1 ),
  1194.   array'lhs' => 52'rhs' => 1 ),
  1195.   array'lhs' => 50'rhs' => 1 ),
  1196.   array'lhs' => 50'rhs' => 1 ),
  1197.   array'lhs' => 53'rhs' => 3 ),
  1198.   array'lhs' => 55'rhs' => 3 ),
  1199.   array'lhs' => 55'rhs' => 2 ),
  1200.   array'lhs' => 54'rhs' => 1 ),
  1201.   array'lhs' => 54'rhs' => 1 ),
  1202.   array'lhs' => 56'rhs' => 3 ),
  1203.   array'lhs' => 56'rhs' => 4 ),
  1204.   array'lhs' => 56'rhs' => 3 ),
  1205.   array'lhs' => 56'rhs' => 4 ),
  1206.   array'lhs' => 56'rhs' => 4 ),
  1207.   array'lhs' => 56'rhs' => 5 ),
  1208.   array'lhs' => 57'rhs' => 3 ),
  1209.   array'lhs' => 57'rhs' => 4 ),
  1210.   array'lhs' => 57'rhs' => 3 ),
  1211.   array'lhs' => 57'rhs' => 4 ),
  1212.   array'lhs' => 57'rhs' => 4 ),
  1213.   array'lhs' => 57'rhs' => 5 ),
  1214.   array'lhs' => 58'rhs' => 3 ),
  1215.   array'lhs' => 58'rhs' => 2 ),
  1216.   array'lhs' => 60'rhs' => 4 ),
  1217.   array'lhs' => 60'rhs' => 5 ),
  1218.   array'lhs' => 60'rhs' => 3 ),
  1219.   array'lhs' => 59'rhs' => 2 ),
  1220.   array'lhs' => 59'rhs' => 2 ),
  1221.   array'lhs' => 59'rhs' => 1 ),
  1222.   array'lhs' => 59'rhs' => 1 ),
  1223.   array'lhs' => 61'rhs' => 1 ),
  1224.   array'lhs' => 62'rhs' => 3 ),
  1225.   array'lhs' => 46'rhs' => 2 ),
  1226.   array'lhs' => 46'rhs' => 1 ),
  1227.   array'lhs' => 64'rhs' => 1 ),
  1228.   array'lhs' => 63'rhs' => 3 ),
  1229.   array'lhs' => 63'rhs' => 4 ),
  1230.   array'lhs' => 45'rhs' => 2 ),
  1231.   array'lhs' => 45'rhs' => 2 ),
  1232.   array'lhs' => 45'rhs' => 2 ),
  1233.   array'lhs' => 45'rhs' => 2 ),
  1234.   array'lhs' => 45'rhs' => 1 ),
  1235.   array'lhs' => 45'rhs' => 1 ),
  1236.   array'lhs' => 45'rhs' => 1 ),
  1237.   array'lhs' => 45'rhs' => 1 ),
  1238.   array'lhs' => 44'rhs' => 2 ),
  1239.   array'lhs' => 44'rhs' => 1 ),
  1240.     );
  1241.  
  1242.     /**
  1243.      * The following table contains a mapping of reduce action to method name
  1244.      * that handles the reduction.
  1245.      * 
  1246.      * If a rule is not set, it has no handler.
  1247.      */
  1248.     static public $yyReduceMap = array(
  1249.         0 => 0,
  1250.         1 => 1,
  1251.         2 => 2,
  1252.         3 => 3,
  1253.         4 => 4,
  1254.         5 => 5,
  1255.         6 => 5,
  1256.         9 => 5,
  1257.         10 => 5,
  1258.         11 => 5,
  1259.         16 => 5,
  1260.         28 => 5,
  1261.         29 => 5,
  1262.         33 => 5,
  1263.         34 => 5,
  1264.         67 => 5,
  1265.         68 => 5,
  1266.         69 => 5,
  1267.         70 => 5,
  1268.         7 => 7,
  1269.         8 => 8,
  1270.         12 => 12,
  1271.         13 => 13,
  1272.         14 => 14,
  1273.         15 => 15,
  1274.         17 => 17,
  1275.         18 => 18,
  1276.         19 => 19,
  1277.         20 => 20,
  1278.         21 => 21,
  1279.         22 => 22,
  1280.         23 => 23,
  1281.         24 => 24,
  1282.         25 => 25,
  1283.         26 => 26,
  1284.         27 => 27,
  1285.         30 => 30,
  1286.         41 => 30,
  1287.         42 => 30,
  1288.         43 => 30,
  1289.         44 => 30,
  1290.         31 => 31,
  1291.         32 => 32,
  1292.         35 => 35,
  1293.         36 => 35,
  1294.         37 => 35,
  1295.         38 => 35,
  1296.         39 => 39,
  1297.         40 => 39,
  1298.         45 => 45,
  1299.         46 => 45,
  1300.         47 => 47,
  1301.         48 => 48,
  1302.         49 => 49,
  1303.         50 => 50,
  1304.         51 => 51,
  1305.         53 => 53,
  1306.         55 => 53,
  1307.         56 => 56,
  1308.         57 => 57,
  1309.         58 => 58,
  1310.         59 => 59,
  1311.         60 => 60,
  1312.         61 => 61,
  1313.         62 => 62,
  1314.         63 => 63,
  1315.         64 => 63,
  1316.         65 => 65,
  1317.         66 => 66,
  1318.         71 => 71,
  1319.         72 => 72,
  1320.     );
  1321.     /* Beginning here are the reduction cases.  A typical example
  1322.     ** follows:
  1323.     **  #line <lineno> <grammarfile>
  1324.     **   function yy_r0($yymsp){ ... }           // User supplied code
  1325.     **  #line <lineno> <thisfile>
  1326.     */
  1327. #line 82 "DocblockParser.y"
  1328.     function yy_r0(){$this->data $this->yystack[$this->yyidx + 0]->minor;    }
  1329. #line 1334 "DocblockParser.php"
  1330. #line 84 "DocblockParser.y"
  1331.     function yy_r1(){$this->_retvalue = array('desc' => $this->yystack[$this->yyidx + -1]->minor'tags' => $this->yystack[$this->yyidx + 0]->minor);    }
  1332. #line 1337 "DocblockParser.php"
  1333. #line 85 "DocblockParser.y"
  1334.     function yy_r2(){$this->_retvalue = array('desc' => $this->yystack[$this->yyidx + 0]->minor'tags' => array());    }
  1335. #line 1340 "DocblockParser.php"
  1336. #line 87 "DocblockParser.y"
  1337.     function yy_r3(){
  1338.     $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1339.     $this->_retvalue[$this->yystack[$this->yyidx + 0]->minor['tag']][$this->yystack[$this->yyidx + 0]->minor;
  1340.     }
  1341. #line 1346 "DocblockParser.php"
  1342. #line 91 "DocblockParser.y"
  1343.     function yy_r4(){$this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor['tag'=> array($this->yystack[$this->yyidx + 0]->minor));    }
  1344. #line 1349 "DocblockParser.php"
  1345. #line 94 "DocblockParser.y"
  1346.     function yy_r5(){$this->_retvalue $this->yystack[$this->yyidx + 0]->minor;    }
  1347. #line 1352 "DocblockParser.php"
  1348. #line 97 "DocblockParser.y"
  1349.     function yy_r7(){
  1350.     if (!is_string($this->yystack[$this->yyidx + -1]->minor|| trim($this->yystack[$this->yyidx + -1]->minor)) {
  1351.         throw new Exception('Invalid docblock: cannot mix text-based paragraphs' .
  1352.             ' with P-based paragraphs');
  1353.     }
  1354.     $this->_retvalue $this->yystack[$this->yyidx + 0]->minor;
  1355.     }
  1356. #line 1361 "DocblockParser.php"
  1357. #line 104 "DocblockParser.y"
  1358.     function yy_r8(){$this->_retvalue = array('');    }
  1359. #line 1364 "DocblockParser.php"
  1360. #line 110 "DocblockParser.y"
  1361.     function yy_r12(){
  1362.     $this->_retvalue = array('type' => 'inline''tag' => substr($this->yystack[$this->yyidx + -2]->minor2)'contents' => $this->yystack[$this->yyidx + -1]->minor);
  1363.     }
  1364. #line 1369 "DocblockParser.php"
  1365. #line 113 "DocblockParser.y"
  1366.     function yy_r13(){
  1367.     $this->_retvalue = array('type' => 'inline''tag' => substr($this->yystack[$this->yyidx + -1]->minor2)'contents' => '');
  1368.     }
  1369. #line 1374 "DocblockParser.php"
  1370. #line 117 "DocblockParser.y"
  1371.     function yy_r14(){
  1372.     $this->_retvalue $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor;
  1373.     }
  1374. #line 1379 "DocblockParser.php"
  1375. #line 120 "DocblockParser.y"
  1376.     function yy_r15(){
  1377.     $this->_retvalue $this->yystack[$this->yyidx + -1]->minor . '}';
  1378.     }
  1379. #line 1384 "DocblockParser.php"
  1380. #line 124 "DocblockParser.y"
  1381.     function yy_r17(){$this->_retvalue '}';    }
  1382. #line 1387 "DocblockParser.php"
  1383. #line 126 "DocblockParser.y"
  1384.     function yy_r18(){
  1385.     $this->_retvalue = array('type' => 'b''text' => $this->yystack[$this->yyidx + -1]->minor);
  1386.     }
  1387. #line 1392 "DocblockParser.php"
  1388. #line 129 "DocblockParser.y"
  1389.     function yy_r19(){
  1390.     $this->_retvalue = array('type' => 'i''text' => $this->yystack[$this->yyidx + -1]->minor);
  1391.     }
  1392. #line 1397 "DocblockParser.php"
  1393. #line 132 "DocblockParser.y"
  1394.     function yy_r20(){
  1395.     $this->_retvalue = array('type' => 'code''text' => $this->yystack[$this->yyidx + -1]->minor);
  1396.     }
  1397. #line 1402 "DocblockParser.php"
  1398. #line 135 "DocblockParser.y"
  1399.     function yy_r21(){
  1400.     $this->_retvalue = array('type' => 'pre''text' => $this->yystack[$this->yyidx + -1]->minor);
  1401.     }
  1402. #line 1407 "DocblockParser.php"
  1403. #line 138 "DocblockParser.y"
  1404.     function yy_r22(){
  1405.     $this->_retvalue = array('type' => 'samp''text' => $this->yystack[$this->yyidx + -1]->minor);
  1406.     }
  1407. #line 1412 "DocblockParser.php"
  1408. #line 141 "DocblockParser.y"
  1409.     function yy_r23(){
  1410.     $this->_retvalue = array('type' => 'var''text' => $this->yystack[$this->yyidx + -1]->minor);
  1411.     }
  1412. #line 1417 "DocblockParser.php"
  1413. #line 144 "DocblockParser.y"
  1414.     function yy_r24(){
  1415.     $this->_retvalue = array('type' => 'kbd''text' => $this->yystack[$this->yyidx + -1]->minor);
  1416.     }
  1417. #line 1422 "DocblockParser.php"
  1418. #line 147 "DocblockParser.y"
  1419.     function yy_r25(){$this->_retvalue = array('type' => 'br');    }
  1420. #line 1425 "DocblockParser.php"
  1421. #line 149 "DocblockParser.y"
  1422.     function yy_r26(){$this->_retvalue substr($this->yystack[$this->yyidx + 0]->minor1strlen($this->yystack[$this->yyidx + 0]->minor- 2);    }
  1423. #line 1428 "DocblockParser.php"
  1424. #line 150 "DocblockParser.y"
  1425.     function yy_r27(){
  1426.     if ($this->yystack[$this->yyidx + 0]->minor == '{@*}'{
  1427.         $this->_retvalue '*/';
  1428.     else {
  1429.         $this->_retvalue '{@';
  1430.     }
  1431.     }
  1432. #line 1437 "DocblockParser.php"
  1433. #line 161 "DocblockParser.y"
  1434.     function yy_r30(){$this->_retvalue = array('list' => $this->yystack[$this->yyidx + -1]->minor);    }
  1435. #line 1440 "DocblockParser.php"
  1436. #line 163 "DocblockParser.y"
  1437.     function yy_r31(){
  1438.     $this->_retvalue $this->yystack[$this->yyidx + -2]->minor;
  1439.     $this->_retvalue[= array('index' => $this->yystack[$this->yyidx + -1]->minor'text' =>$this->yystack[$this->yyidx + 0]->minor);
  1440.     }
  1441. #line 1446 "DocblockParser.php"
  1442. #line 167 "DocblockParser.y"
  1443.     function yy_r32(){
  1444.     $this->_retvalue = array(array('index' => $this->yystack[$this->yyidx + -1]->minor'text' => $this->yystack[$this->yyidx + 0]->minor));
  1445.     }
  1446. #line 1451 "DocblockParser.php"
  1447. #line 174 "DocblockParser.y"
  1448.     function yy_r35(){
  1449.     $this->_retvalue = array();
  1450.     foreach ($this->yystack[$this->yyidx + -1]->minor as $i => $index{
  1451.         $this->_retvalue[= array('index' => $i + 1'text' => $index['text']);
  1452.     }
  1453.     $this->_retvalue = array('list' => $this->_retvalue);
  1454.     }
  1455. #line 1460 "DocblockParser.php"
  1456. #line 202 "DocblockParser.y"
  1457.     function yy_r39(){
  1458.     $this->_retvalue = array();
  1459.     foreach ($this->yystack[$this->yyidx + -2]->minor as $i => $index{
  1460.         $this->_retvalue[= array('index' => $i + 1'text' => $index['text']);
  1461.     }
  1462.     $this->_retvalue = array('list' => $this->_retvalue);
  1463.     }
  1464. #line 1469 "DocblockParser.php"
  1465. #line 221 "DocblockParser.y"
  1466.     function yy_r45(){$this->_retvalue = array('list' => $this->yystack[$this->yyidx + -2]->minor);    }
  1467. #line 1472 "DocblockParser.php"
  1468. #line 224 "DocblockParser.y"
  1469.     function yy_r47(){
  1470.     $this->_retvalue $this->yystack[$this->yyidx + -2]->minor;
  1471.     $this->_retvalue[= array('index' => '*''text' => $this->yystack[$this->yyidx + 0]->minor);
  1472.     }
  1473. #line 1478 "DocblockParser.php"
  1474. #line 228 "DocblockParser.y"
  1475.     function yy_r48(){
  1476.     $this->_retvalue = array(array('index' => '*''text' => $this->yystack[$this->yyidx + 0]->minor));
  1477.     }
  1478. #line 1483 "DocblockParser.php"
  1479. #line 232 "DocblockParser.y"
  1480.     function yy_r49(){
  1481.     $this->_retvalue $this->yystack[$this->yyidx + -3]->minor;
  1482.     $this->_retvalue[= array('index' => '*''text' => $this->yystack[$this->yyidx + -1]->minor);
  1483.     }
  1484. #line 1489 "DocblockParser.php"
  1485. #line 236 "DocblockParser.y"
  1486.     function yy_r50(){
  1487.     $this->_retvalue $this->yystack[$this->yyidx + -4]->minor;
  1488.     $this->_retvalue[= array('index' => '*''text' => $this->yystack[$this->yyidx + -1]->minor);
  1489.     }
  1490. #line 1495 "DocblockParser.php"
  1491. #line 240 "DocblockParser.y"
  1492.     function yy_r51(){
  1493.     $this->_retvalue = array(array('index' => '*''text' => $this->yystack[$this->yyidx + -1]->minor));
  1494.     }
  1495. #line 1500 "DocblockParser.php"
  1496. #line 245 "DocblockParser.y"
  1497.     function yy_r53(){
  1498.     if (trim($this->yystack[$this->yyidx + 0]->minor)) {
  1499.         throw new Exception("Syntax Error on line " $this->lex->line . ': Unexpected DOCBLOCK_TEXT, expected one of DOCBLOCK_NEWLINE, DOCBLOCK_WHITESPACE');
  1500.     }
  1501.     }
  1502. #line 1507 "DocblockParser.php"
  1503. #line 257 "DocblockParser.y"
  1504.     function yy_r56(){
  1505.     if ($this->_inInternal{
  1506.         throw new Exception("Syntax Error on line " $this->lex->line . ': Cannot nest {@internal}}');
  1507.     }
  1508.     $this->_inInternal = true;
  1509.     }
  1510. #line 1515 "DocblockParser.php"
  1511. #line 263 "DocblockParser.y"
  1512.     function yy_r57(){
  1513.     $this->_inInternal = false;
  1514.     $this->_retvalue '';
  1515.     if ($this->_processInternal{
  1516.         $this->_retvalue $this->yystack[$this->yyidx + -1]->minor; 
  1517.     }
  1518.     }
  1519. #line 1524 "DocblockParser.php"
  1520. #line 271 "DocblockParser.y"
  1521.     function yy_r58(){
  1522.     $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1523.     $this->_retvalue[$this->yystack[$this->yyidx + 0]->minor;
  1524.     }
  1525. #line 1530 "DocblockParser.php"
  1526. #line 275 "DocblockParser.y"
  1527.     function yy_r59(){
  1528.     $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
  1529.     }
  1530. #line 1535 "DocblockParser.php"
  1531. #line 285 "DocblockParser.y"
  1532.     function yy_r60(){
  1533.     if ($this->_inP{
  1534.         throw new Exception("Syntax Error on line " $this->lex->line . ': Cannot nest <p>');
  1535.     }
  1536.     $this->_inP = true;
  1537.     }
  1538. #line 1543 "DocblockParser.php"
  1539. #line 291 "DocblockParser.y"
  1540.     function yy_r61(){
  1541.     $this->_inP = false;
  1542.     $this->_retvalue = array('paragraph' => $this->yystack[$this->yyidx + -1]->minor);
  1543.     }
  1544. #line 1549 "DocblockParser.php"
  1545. #line 295 "DocblockParser.y"
  1546.     function yy_r62(){
  1547.     $this->_inP = false;
  1548.     $this->_retvalue = array('paragraph' => $this->yystack[$this->yyidx + -2]->minor);
  1549.     }
  1550. #line 1555 "DocblockParser.php"
  1551. #line 301 "DocblockParser.y"
  1552.     function yy_r63(){
  1553.     if (is_string($this->yystack[$this->yyidx + -1]->minor)) {
  1554.         $this->_retvalue $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor;
  1555.     else {
  1556.         $i count($this->yystack[$this->yyidx + -1]->minor- 1;
  1557.         if (is_string($this->yystack[$this->yyidx + -1]->minor[$i])) {
  1558.             $this->yystack[$this->yyidx + -1]->minor[$i.= $this->yystack[$this->yyidx + 0]->minor;
  1559.         else {
  1560.             $this->yystack[$this->yyidx + -1]->minor[$this->yystack[$this->yyidx + 0]->minor;
  1561.         }
  1562.         $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1563.     }
  1564.     }
  1565. #line 1570 "DocblockParser.php"
  1566. #line 327 "DocblockParser.y"
  1567.     function yy_r65(){
  1568.     if ($this->yystack[$this->yyidx + 0]->minor === ''{
  1569.         return $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1570.     }
  1571.     if (is_string($this->yystack[$this->yyidx + 0]->minor&& is_string($this->yystack[$this->yyidx + -1]->minor)) {
  1572.         return $this->_retvalue $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor;
  1573.     }
  1574.     if (is_string($this->yystack[$this->yyidx + -1]->minor)) {
  1575.         $this->yystack[$this->yyidx + -1]->minor = array($this->yystack[$this->yyidx + -1]->minor);
  1576.     }
  1577.     $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1578.     $this->_retvalue[$this->yystack[$this->yyidx + 0]->minor;
  1579.     }
  1580. #line 1585 "DocblockParser.php"
  1581. #line 340 "DocblockParser.y"
  1582.     function yy_r66(){
  1583.     if ($this->yystack[$this->yyidx + 0]->minor === ''{
  1584.         return $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1585.     }
  1586.     if (is_string($this->yystack[$this->yyidx + 0]->minor&& is_string($this->yystack[$this->yyidx + -1]->minor)) {
  1587.         return $this->_retvalue $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor;
  1588.     }
  1589.     if (is_string($this->yystack[$this->yyidx + -1]->minor)) {
  1590.         $this->yystack[$this->yyidx + -1]->minor = array($this->yystack[$this->yyidx + -1]->minor);
  1591.     }
  1592.     // check to see if $this->yystack[$this->yyidx + -1]->minor's last entry and $this->yystack[$this->yyidx + 0]->minor's first are strings
  1593.     if (isset($this->yystack[$this->yyidx + 0]->minor[0])) {
  1594.         if (is_string($this->yystack[$this->yyidx + -1]->minor[count($this->yystack[$this->yyidx + -1]->minor- 1]&& is_string($this->yystack[$this->yyidx + 0]->minor[0])) {
  1595.             $this->yystack[$this->yyidx + -1]->minor[count($this->yystack[$this->yyidx + -1]->minor- 1.= $this->yystack[$this->yyidx + 0]->minor[0];
  1596.             array_shift($this->yystack[$this->yyidx + 0]->minor);
  1597.         }
  1598.         $this->_retvalue array_merge($this->yystack[$this->yyidx + -1]->minor$this->yystack[$this->yyidx + 0]->minor);
  1599.     else {
  1600.         $this->_retvalue $this->yystack[$this->yyidx + -1]->minor;
  1601.         $this->_retvalue[$this->yystack[$this->yyidx + 0]->minor;
  1602.     }
  1603.     }
  1604. #line 1609 "DocblockParser.php"
  1605. #line 367 "DocblockParser.y"
  1606.     function yy_r71(){
  1607.     $this->_retvalue = array(
  1608.         'tag' => substr($this->yystack[$this->yyidx + -1]->minor1),
  1609.         'text' => $this->yystack[$this->yyidx + 0]->minor,
  1610.     );
  1611.     }
  1612. #line 1617 "DocblockParser.php"
  1613. #line 373 "DocblockParser.y"
  1614.     function yy_r72(){
  1615.     $this->_retvalue = array(
  1616.         'tag' => substr($this->yystack[$this->yyidx + 0]->minor1),
  1617.         'text' => '',
  1618.     );
  1619.     }
  1620. #line 1625 "DocblockParser.php"
  1621.  
  1622.     /**
  1623.      * placeholder for the left hand side in a reduce operation.
  1624.      * 
  1625.      * For a parser with a rule like this:
  1626.      * <pre>
  1627.      * rule(A) ::= B. { A = 1; }
  1628.      * </pre>
  1629.      * 
  1630.      * The parser will translate to something like:
  1631.      * 
  1632.      * <code>
  1633.      * function yy_r0(){$this->_retvalue = 1;}
  1634.      * </code>
  1635.      */
  1636.     private $_retvalue;
  1637.  
  1638.     /**
  1639.      * Perform a reduce action and the shift that must immediately
  1640.      * follow the reduce.
  1641.      * 
  1642.      * For a rule such as:
  1643.      * 
  1644.      * <pre>
  1645.      * A ::= B blah C. { dosomething(); }
  1646.      * </pre>
  1647.      * 
  1648.      * This function will first call the action, if any, ("dosomething();" in our
  1649.      * example), and then it will pop three states from the stack,
  1650.      * one for each entry on the right-hand side of the expression
  1651.      * (B, blah, and C in our example rule), and then push the result of the action
  1652.      * back on to the stack with the resulting state reduced to (as described in the .out
  1653.      * file)
  1654.      * @param int Number of the rule by which to reduce
  1655.      */
  1656.     function yy_reduce($yyruleno)
  1657.     {
  1658.         //int $yygoto;                     /* The next state */
  1659.         //int $yyact;                      /* The next action */
  1660.         //mixed $yygotominor;        /* The LHS of the rule reduced */
  1661.         //PHP_Parser_DocblockParseryyStackEntry $yymsp;            /* The top of the parser's stack */
  1662.         //int $yysize;                     /* Amount to pop the stack */
  1663.         $yymsp $this->yystack[$this->yyidx];
  1664.         if (self::$yyTraceFILE && $yyruleno >= 0 
  1665.               && $yyruleno < count(self::$yyRuleName)) {
  1666.             fprintf(self::$yyTraceFILE"%sReduce (%d) [%s].\n",
  1667.                 self::$yyTracePrompt$yyruleno,
  1668.                 self::$yyRuleName[$yyruleno]);
  1669.         }
  1670.  
  1671.         $this->_retvalue $yy_lefthand_side = null;
  1672.         if (array_key_exists($yyrulenoself::$yyReduceMap)) {
  1673.             // call the action
  1674.             $this->_retvalue = null;
  1675.             $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
  1676.             $yy_lefthand_side $this->_retvalue;
  1677.         }
  1678.         $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
  1679.         $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
  1680.         $this->yyidx -= $yysize;
  1681.         for($i $yysize$i$i--{
  1682.             // pop all of the right-hand side parameters
  1683.             array_pop($this->yystack);
  1684.         }
  1685.         $yyact $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno$yygoto);
  1686.         if ($yyact < self::YYNSTATE{
  1687.             /* If we are not debugging and the reduce action popped at least
  1688.             ** one element off the stack, then we can push the new element back
  1689.             ** onto the stack here, and skip the stack overflow test in yy_shift().
  1690.             ** That gives a significant speed improvement. */
  1691.             if (!self::$yyTraceFILE && $yysize{
  1692.                 $this->yyidx++;
  1693.                 $x = new PHP_Parser_DocblockParseryyStackEntry;
  1694.                 $x->stateno = $yyact;
  1695.                 $x->major = $yygoto;
  1696.                 $x->minor = $yy_lefthand_side;
  1697.                 $this->yystack[$this->yyidx$x;
  1698.             else {
  1699.                 $this->yy_shift($yyact$yygoto$yy_lefthand_side);
  1700.             }
  1701.         elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1{
  1702.             $this->yy_accept();
  1703.         }
  1704.     }
  1705.  
  1706.     /**
  1707.      * The following code executes when the parse fails
  1708.      * 
  1709.      * Code from %parse_fail is inserted here
  1710.      */
  1711.     function yy_parse_failed()
  1712.     {
  1713.         if (self::$yyTraceFILE{
  1714.             fprintf(self::$yyTraceFILE"%sFail!\n"self::$yyTracePrompt);
  1715.         }
  1716.         while ($this->yyidx >= 0{
  1717.             $this->yy_pop_parser_stack();
  1718.         }
  1719.         /* Here code is inserted which will be executed whenever the
  1720.         ** parser fails */
  1721.     }
  1722.  
  1723.     /**
  1724.      * The following code executes when a syntax error first occurs.
  1725.      * 
  1726.      * %syntax_error code is inserted here
  1727.      * @param int The major type of the error token
  1728.      * @param mixed The minor type of the error token
  1729.      */
  1730.     function yy_syntax_error($yymajor$TOKEN)
  1731.     {
  1732. #line 4 "DocblockParser.y"
  1733.  
  1734. /* ?><?php */
  1735.     echo "Syntax Error on line " $this->lex->line . ": token '" 
  1736.         $this->lex->value . "' while parsing rule:";
  1737.     foreach ($this->yystack as $entry{
  1738.         echo $this->tokenName($entry->major' ';
  1739.     }
  1740.     foreach ($this->yy_get_expected_tokens($yymajoras $token{
  1741.         $expect[= self::$yyTokenName[$token];
  1742.     }
  1743.     if (count($expect> 5{
  1744.         $expect array_slice($expect05);
  1745.         $expect['...';
  1746.     }
  1747.     throw new Exception('Unexpected ' $this->tokenName($yymajor'(' $TOKEN
  1748.         . '), expected one of: ' implode(','$expect));
  1749. #line 1755 "DocblockParser.php"
  1750.     }
  1751.  
  1752.     /**
  1753.      * The following is executed when the parser accepts
  1754.      * 
  1755.      * %parse_accept code is inserted here
  1756.      */
  1757.     function yy_accept()
  1758.     {
  1759.         if (self::$yyTraceFILE{
  1760.             fprintf(self::$yyTraceFILE"%sAccept!\n"self::$yyTracePrompt);
  1761.         }
  1762.         while ($this->yyidx >= 0{
  1763.             $stack $this->yy_pop_parser_stack();
  1764.         }
  1765.         /* Here code is inserted which will be executed whenever the
  1766.         ** parser accepts */
  1767. #line 76 "DocblockParser.y"
  1768.  
  1769. #line 1776 "DocblockParser.php"
  1770.     }
  1771.  
  1772.     /**
  1773.      * The main parser program.
  1774.      * 
  1775.      * The first argument is the major token number.  The second is
  1776.      * the token value string as scanned from the input.
  1777.      *
  1778.      * @param int the token number
  1779.      * @param mixed the token value
  1780.      * @param mixed any extra arguments that should be passed to handlers
  1781.      */
  1782.     function doParse($yymajor$yytokenvalue)
  1783.     {
  1784. //        $yyact;            /* The parser action. */
  1785. //        $yyendofinput;     /* True if we are at the end of input */
  1786.         $yyerrorhit = 0;   /* True if yymajor has invoked an error */
  1787.         
  1788.         /* (re)initialize the parser, if necessary */
  1789.         if ($this->yyidx === null || $this->yyidx < 0{
  1790.             /* if ($yymajor == 0) return; // not sure why this was here... */
  1791.             $this->yyidx = 0;
  1792.             $this->yyerrcnt = -1;
  1793.             $x = new PHP_Parser_DocblockParseryyStackEntry;
  1794.             $x->stateno = 0;
  1795.             $x->major = 0;
  1796.             $this->yystack = array();
  1797.             array_push($this->yystack$x);
  1798.         }
  1799.         $yyendofinput ($yymajor==0);
  1800.         
  1801.         if (self::$yyTraceFILE{
  1802.             fprintf(self::$yyTraceFILE"%sInput %s\n",
  1803.                 self::$yyTracePromptself::$yyTokenName[$yymajor]);
  1804.         }
  1805.         
  1806.         do {
  1807.             $yyact $this->yy_find_shift_action($yymajor);
  1808.             if ($yymajor < self::YYERRORSYMBOL &&
  1809.                   !$this->yy_is_expected_token($yymajor)) {
  1810.                 // force a syntax error
  1811.                 $yyact = self::YY_ERROR_ACTION;
  1812.             }
  1813.             if ($yyact < self::YYNSTATE{
  1814.                 $this->yy_shift($yyact$yymajor$yytokenvalue);
  1815.                 $this->yyerrcnt--;
  1816.                 if ($yyendofinput && $this->yyidx >= 0{
  1817.                     $yymajor = 0;
  1818.                 else {
  1819.                     $yymajor = self::YYNOCODE;
  1820.                 }
  1821.             elseif ($yyact < self::YYNSTATE + self::YYNRULE{
  1822.                 $this->yy_reduce($yyact - self::YYNSTATE);
  1823.             elseif ($yyact == self::YY_ERROR_ACTION{
  1824.                 if (self::$yyTraceFILE{
  1825.                     fprintf(self::$yyTraceFILE"%sSyntax Error!\n",
  1826.                         self::$yyTracePrompt);
  1827.                 }
  1828.                 if (self::YYERRORSYMBOL{
  1829.                     /* A syntax error has occurred.
  1830.                     ** The response to an error depends upon whether or not the
  1831.                     ** grammar defines an error token "ERROR".  
  1832.                     **
  1833.                     ** This is what we do if the grammar does define ERROR:
  1834.                     **
  1835.                     **  * Call the %syntax_error function.
  1836.                     **
  1837.                     **  * Begin popping the stack until we enter a state where
  1838.                     **    it is legal to shift the error symbol, then shift
  1839.                     **    the error symbol.
  1840.                     **
  1841.                     **  * Set the error count to three.
  1842.                     **
  1843.                     **  * Begin accepting and shifting new tokens.  No new error
  1844.                     **    processing will occur until three tokens have been
  1845.                     **    shifted successfully.
  1846.                     **
  1847.                     */
  1848.                     if ($this->yyerrcnt < 0{
  1849.                         $this->yy_syntax_error($yymajor$yytokenvalue);
  1850.                     }
  1851.                     $yymx $this->yystack[$this->yyidx]->major;
  1852.                     if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
  1853.                         if (self::$yyTraceFILE{
  1854.                             fprintf(self::$yyTraceFILE"%sDiscard input token %s\n",
  1855.                                 self::$yyTracePromptself::$yyTokenName[$yymajor]);
  1856.                         }
  1857.                         $this->yy_destructor($yymajor$yytokenvalue);
  1858.                         $yymajor = self::YYNOCODE;
  1859.                     else {
  1860.                         while ($this->yyidx >= 0 &&
  1861.                                  $yymx != self::YYERRORSYMBOL &&
  1862.         ($yyact $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
  1863.                               ){
  1864.                             $this->yy_pop_parser_stack();
  1865.                         }
  1866.                         if ($this->yyidx < 0 || $yymajor==0{
  1867.                             $this->yy_destructor($yymajor$yytokenvalue);
  1868.                             $this->yy_parse_failed();
  1869.                             $yymajor = self::YYNOCODE;
  1870.                         elseif ($yymx != self::YYERRORSYMBOL{
  1871.                             $u2 = 0;
  1872.                             $this->yy_shift($yyactself::YYERRORSYMBOL$u2);
  1873.                         }
  1874.                     }
  1875.                     $this->yyerrcnt = 3;
  1876.                     $yyerrorhit = 1;
  1877.                 else {
  1878.                     /* YYERRORSYMBOL is not defined */
  1879.                     /* This is what we do if the grammar does not define ERROR:
  1880.                     **
  1881.                     **  * Report an error message, and throw away the input token.
  1882.                     **
  1883.                     **  * If the input token is $, then fail the parse.
  1884.                     **
  1885.                     ** As before, subsequent error messages are suppressed until
  1886.                     ** three input tokens have been successfully shifted.
  1887.                     */
  1888.                     if ($this->yyerrcnt <= 0{
  1889.                         $this->yy_syntax_error($yymajor$yytokenvalue);
  1890.                     }
  1891.                     $this->yyerrcnt = 3;
  1892.                     $this->yy_destructor($yymajor$yytokenvalue);
  1893.                     if ($yyendofinput{
  1894.                         $this->yy_parse_failed();
  1895.                     }
  1896.                     $yymajor = self::YYNOCODE;
  1897.                 }
  1898.             else {
  1899.                 $this->yy_accept();
  1900.                 $yymajor = self::YYNOCODE;
  1901.             }            
  1902.         while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
  1903.     }
  1904. }

Documentation generated on Mon, 11 Mar 2019 15:41:15 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.