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

Source for file PHP.php

Documentation is available at PHP.php

  1. <?php
  2. /* Driver template for the LEMON parser generator.
  3. ** The author disclaims copyright to this source code.
  4. */
  5. /** The following structure represents a single element of the
  6.  * parser's stack.  Information stored includes:
  7.  *
  8.  *   +  The state number for the parser at this level of the stack.
  9.  *
  10.  *   +  The value of the token stored at this level of the stack.
  11.  *      (In other words, the "major" token.)
  12.  *
  13.  *   +  The semantic value stored at this level of the stack.  This is
  14.  *      the information used by the action routines in the grammar.
  15.  *      It is sometimes called the "minor" token.
  16.  */
  17. class PHPyyStackEntry
  18. {
  19.     public $stateno;       /* The state-number */
  20.     public $major;         /* The major token value.  This is the code
  21.                      ** number for the token at this stack level */
  22.     public $minor/* The user-supplied minor token value.  This
  23.                      ** is the value of the token  */
  24. };
  25.  
  26. /**
  27.  * The state of the parser is completely contained in an instance of
  28.  * the following structure
  29.  */
  30. class PHPyyParser
  31. {
  32. /* First off, code is include which follows the "include" declaration
  33. ** in the input file. */
  34. #line 3 "PHP.y"
  35.  
  36.     static public $transTable = array();
  37.  
  38.     function __construct()
  39.     {
  40.         if (!count(self::$transTable)) {
  41.             $start = 240; // start nice and low to be sure
  42.             while (token_name($start== 'UNKNOWN'{
  43.                 $start++;
  44.             }
  45.             $hash array_flip(self::$yyTokenName);
  46.             $map =
  47.                 array(
  48.                     ord(','=> self::COMMA,
  49.                     ord('='=> self::EQUALS,
  50.                     ord('?'=> self::QUESTION,
  51.                     ord(':'=> self::COLON,
  52.                     ord('|'=> self::BAR,
  53.                     ord('^'=> self::CARAT,
  54.                     ord('&'=> self::AMPERSAND,
  55.                     ord('<'=> self::LESSTHAN,
  56.                     ord('>'=> self::GREATERTHAN,
  57.                     ord('+'=> self::PLUS,
  58.                     ord('-'=> self::MINUS,
  59.                     ord('.'=> self::DOT,
  60.                     ord('*'=> self::TIMES,
  61.                     ord('/'=> self::DIVIDE,
  62.                     ord('%'=> self::PERCENT,
  63.                     ord('!'=> self::EXCLAM,
  64.                     ord('~'=> self::TILDE,
  65.                     ord('@'=> self::AT,
  66.                     ord('['=> self::LBRACKET,
  67.                     ord('('=> self::LPAREN,
  68.                     ord(')'=> self::RPAREN,
  69.                     ord(';'=> self::SEMI,
  70.                     ord('{'=> self::LCURLY,
  71.                     ord('}'=> self::RCURLY,
  72.                     ord('`'=> self::BACKQUOTE,
  73.                     ord('$'=> self::DOLLAR,
  74.                     ord(']'=> self::RBRACKET,
  75.                     ord('"'=> self::DOUBLEQUOTE,
  76.                     ord("'"=> self::SINGLEQUOTE,
  77.                 );
  78.             for ($i $start$i < self::YYERRORSYMBOL + $start$i++{
  79.                 $lt token_name($i);
  80.                 if (!isset($hash[$lt])) {
  81.                     continue;
  82.                 }
  83.                 $lt ($lt == 'T_ML_COMMENT''T_COMMENT' $lt;
  84.                 $lt ($lt == 'T_DOUBLE_COLON'?  'T_PAAMAYIM_NEKUDOTAYIM' $lt;
  85. //                echo "$lt has hash? ".$hash[$lt]."\n";
  86. //                continue;
  87.                 
  88.                 //echo "compare $lt with {$tokens[$i]}\n";
  89.                 $map[$i$hash[$lt];
  90.             }
  91.             //print_r($map);
  92.             // set the map to false if nothing in there.
  93.             self::$transTable $map;
  94.         }
  95.     }
  96. #line 98 "0"
  97.  
  98. /* Next is all token values, in a form suitable for use by makeheaders.
  99. ** This section will be null unless lemon is run with the -m switch.
  100. */
  101. /* 
  102. ** These constants (all generated automatically by the parser generator)
  103. ** specify the various kinds of tokens (terminals) that the parser
  104. ** understands. 
  105. **
  106. ** Each symbol here is a terminal symbol in the grammar.
  107. */
  108.     const T_INCLUDE                      =  1;
  109.     const T_INCLUDE_ONCE                 =  2;
  110.     const T_EVAL                         =  3;
  111.     const T_REQUIRE                      =  4;
  112.     const T_REQUIRE_ONCE                 =  5;
  113.     const COMMA                          =  6;
  114.     const T_LOGICAL_OR                   =  7;
  115.     const T_LOGICAL_XOR                  =  8;
  116.     const T_LOGICAL_AND                  =  9;
  117.     const T_PRINT                        = 10;
  118.     const EQUALS                         = 11;
  119.     const T_PLUS_EQUAL                   = 12;
  120.     const T_MINUS_EQUAL                  = 13;
  121.     const T_MUL_EQUAL                    = 14;
  122.     const T_DIV_EQUAL                    = 15;
  123.     const T_CONCAT_EQUAL                 = 16;
  124.     const T_MOD_EQUAL                    = 17;
  125.     const T_AND_EQUAL                    = 18;
  126.     const T_OR_EQUAL                     = 19;
  127.     const T_XOR_EQUAL                    = 20;
  128.     const T_SL_EQUAL                     = 21;
  129.     const T_SR_EQUAL                     = 22;
  130.     const QUESTION                       = 23;
  131.     const COLON                          = 24;
  132.     const T_BOOLEAN_OR                   = 25;
  133.     const T_BOOLEAN_AND                  = 26;
  134.     const BAR                            = 27;
  135.     const CARAT                          = 28;
  136.     const AMPERSAND                      = 29;
  137.     const T_IS_EQUAL                     = 30;
  138.     const T_IS_NOT_EQUAL                 = 31;
  139.     const T_IS_IDENTICAL                 = 32;
  140.     const T_IS_NOT_IDENTICAL             = 33;
  141.     const LESSTHAN                       = 34;
  142.     const T_IS_SMALLER_OR_EQUAL          = 35;
  143.     const GREATERTHAN                    = 36;
  144.     const T_IS_GREATER_OR_EQUAL          = 37;
  145.     const T_SL                           = 38;
  146.     const T_SR                           = 39;
  147.     const PLUS                           = 40;
  148.     const MINUS                          = 41;
  149.     const DOT                            = 42;
  150.     const TIMES                          = 43;
  151.     const DIVIDE                         = 44;
  152.     const PERCENT                        = 45;
  153.     const EXCLAM                         = 46;
  154.     const T_INSTANCEOF                   = 47;
  155.     const TILDE                          = 48;
  156.     const T_INC                          = 49;
  157.     const T_DEC                          = 50;
  158.     const T_INT_CAST                     = 51;
  159.     const T_DOUBLE_CAST                  = 52;
  160.     const T_STRING_CAST                  = 53;
  161.     const T_ARRAY_CAST                   = 54;
  162.     const T_OBJECT_CAST                  = 55;
  163.     const T_BOOL_CAST                    = 56;
  164.     const T_UNSET_CAST                   = 57;
  165.     const AT                             = 58;
  166.     const LBRACKET                       = 59;
  167.     const T_NEW                          = 60;
  168.     const T_CLONE                        = 61;
  169.     const T_ELSEIF                       = 62;
  170.     const T_ELSE                         = 63;
  171.     const T_ENDIF                        = 64;
  172.     const T_STATIC                       = 65;
  173.     const T_ABSTRACT                     = 66;
  174.     const T_FINAL                        = 67;
  175.     const T_PRIVATE                      = 68;
  176.     const T_PROTECTED                    = 69;
  177.     const T_PUBLIC                       = 70;
  178.     const T_HALT_COMPILER                = 71;
  179.     const LPAREN                         = 72;
  180.     const RPAREN                         = 73;
  181.     const SEMI                           = 74;
  182.     const LCURLY                         = 75;
  183.     const RCURLY                         = 76;
  184.     const T_IF                           = 77;
  185.     const T_WHILE                        = 78;
  186.     const T_DO                           = 79;
  187.     const T_FOR                          = 80;
  188.     const T_SWITCH                       = 81;
  189.     const T_BREAK                        = 82;
  190.     const T_CONTINUE                     = 83;
  191.     const T_RETURN                       = 84;
  192.     const T_GLOBAL                       = 85;
  193.     const T_ECHO                         = 86;
  194.     const T_INLINE_HTML                  = 87;
  195.     const T_USE                          = 88;
  196.     const T_UNSET                        = 89;
  197.     const T_FOREACH                      = 90;
  198.     const T_AS                           = 91;
  199.     const T_DECLARE                      = 92;
  200.     const T_TRY                          = 93;
  201.     const T_CATCH                        = 94;
  202.     const T_VARIABLE                     = 95;
  203.     const T_THROW                        = 96;
  204.     const T_FUNCTION                     = 97;
  205.     const T_STRING                       = 98;
  206.     const T_CLASS                        = 99;
  207.     const T_EXTENDS                      = 100;
  208.     const T_INTERFACE                    = 101;
  209.     const T_IMPLEMENTS                   = 102;
  210.     const T_LIST                         = 103;
  211.     const T_EXIT                         = 104;
  212.     const T_ARRAY                        = 105;
  213.     const BACKQUOTE                      = 106;
  214.     const T_LNUMBER                      = 107;
  215.     const T_DNUMBER                      = 108;
  216.     const T_CONSTANT_ENCAPSED_STRING     = 109;
  217.     const T_LINE                         = 110;
  218.     const T_FILE                         = 111;
  219.     const T_CLASS_C                      = 112;
  220.     const T_METHOD_C                     = 113;
  221.     const T_FUNC_C                       = 114;
  222.     const T_DOUBLE_ARROW                 = 115;
  223.     const T_PAAMAYIM_NEKUDOTAYIM         = 116;
  224.     const T_ENDFOR                       = 117;
  225.     const T_ENDFOREACH                   = 118;
  226.     const T_ENDDECLARE                   = 119;
  227.     const T_ENDSWITCH                    = 120;
  228.     const T_CASE                         = 121;
  229.     const T_DEFAULT                      = 122;
  230.     const T_ENDWHILE                     = 123;
  231.     const DOLLAR                         = 124;
  232.     const T_VAR                          = 125;
  233.     const T_CONST                        = 126;
  234.     const T_OBJECT_OPERATOR              = 127;
  235.     const RBRACKET                       = 128;
  236.     const T_NUM_STRING                   = 129;
  237.     const T_ENCAPSED_AND_WHITESPACE      = 130;
  238.     const T_CHARACTER                    = 131;
  239.     const T_BAD_CHARACTER                = 132;
  240.     const T_DOLLAR_OPEN_CURLY_BRACES     = 133;
  241.     const T_STRING_VARNAME               = 134;
  242.     const T_CURLY_OPEN                   = 135;
  243.     const T_ISSET                        = 136;
  244.     const T_EMPTY                        = 137;
  245.     const DOUBLEQUOTE                    = 138;
  246.     const SINGLEQUOTE                    = 139;
  247.     const T_START_HEREDOC                = 140;
  248.     const T_END_HEREDOC                  = 141;
  249.     const YY_NO_ACTION = 1040;
  250.     const YY_ACCEPT_ACTION = 1039;
  251.     const YY_ERROR_ACTION = 1038;
  252.  
  253. /* Next are that tables used to determine what action to take based on the
  254. ** current state and lookahead token.  These tables are used to implement
  255. ** functions that take a state number and lookahead value and return an
  256. ** action integer.  
  257. **
  258. ** Suppose the action integer is N.  Then the action is determined as
  259. ** follows
  260. **
  261. **   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
  262. **                                      token onto the stack and goto state N.
  263. **
  264. **   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
  265. **
  266. **   N == YYNSTATE+YYNRULE              A syntax error has occurred.
  267. **
  268. **   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
  269. **
  270. **   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
  271. **                                      slots in the yy_action[] table.
  272. **
  273. ** The action table is constructed as a single large table named yy_action[].
  274. ** Given state S and lookahead X, the action is computed as
  275. **
  276. **      yy_action[ yy_shift_ofst[S] + X ]
  277. **
  278. ** If the index value yy_shift_ofst[S]+X is out of range or if the value
  279. ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
  280. ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
  281. ** and that yy_default[S] should be used instead.  
  282. **
  283. ** The formula above is for computing the action when the lookahead is
  284. ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
  285. ** a reduce action) then the yy_reduce_ofst[] array is used in place of
  286. ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
  287. ** YY_SHIFT_USE_DFLT.
  288. **
  289. ** The following are the tables generated in this section:
  290. **
  291. **  yy_action[]        A single table containing all actions.
  292. **  yy_lookahead[]     A table containing the lookahead for each entry in
  293. **                     yy_action.  Used to detect hash collisions.
  294. **  yy_shift_ofst[]    For each state, the offset into yy_action for
  295. **                     shifting terminals.
  296. **  yy_reduce_ofst[]   For each state, the offset into yy_action for
  297. **                     shifting non-terminals after a reduce.
  298. **  yy_default[]       Default action for each state.
  299. */

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