phpDocumentor PHP_LexerGenerator
[ class tree: PHP_LexerGenerator ] [ index: PHP_LexerGenerator ] [ all elements ]

Example lexer source

  1. <?php
  2. class TestLexer
  3. {
  4.     private $data;
  5.     private $N;
  6.     public $token;
  7.     public $value;
  8.     private $line;
  9.     private $state 1;
  10.  
  11.     function __construct($data)
  12.     {
  13.         $this->data $data;
  14.         $this->0;
  15.         $this->line 1;
  16.     }
  17.  
  18. /*!lex2php
  19. %input $this->data
  20. %counter $this->N
  21. %token $this->token
  22. %value $this->value
  23. %line $this->line
  24. weirdo = /(test)\1{1,2}/ /(hi)\1/
  25. alpha = /[a-zA-Z]/
  26. alphaplus = /[a-zA-Z]+/
  27. number = /[0-9]/
  28. numerals = /([0-9])+/
  29. whitespace = /[ \t\n]+/
  30. blah = "$"
  31. blahblah = /a\$/
  32. COMPLEX = Z((@import\s+["'`]([\w:?=@&/#._;-]+)["'`];)|(:\s*url\s*\([\s"'`]*([\w:?=@&/#._;-]+)([\s"'`]*\))|<[^>]*\s+(src|href|url)\=[\s"'`]*([\w:?=@&/#._;-]+)[\s"'`]*[^>]*>))Z
  33. */
  34. /*!lex2php
  35. %statename START
  36. COMPLEX {
  37.     echo "complex\n";
  38.     var_dump($this->value);
  39.     echo "    complex subpatterns: \n";
  40.     var_dump($yy_subpatterns);
  41. }
  42. "#" weirdo {
  43.     echo "weirdo\n";
  44.     var_dump($this->value);
  45.     echo "    weirdo subpatterns: \n";
  46.     var_dump($yy_subpatterns);
  47. }
  48. alpha "_" alphaplus numerals {
  49.     echo "rule 1\n";
  50.     var_dump($this->value);
  51.     echo "    rule 1 subpatterns: \n";
  52.     var_dump($yy_subpatterns);
  53.     $this->yypushstate(self::TWO);
  54. }
  55. alpha "_" alphaplus {
  56.     echo "rule 2\n";
  57.     var_dump($this->value);
  58.     echo "    rule 2 subpatterns: \n";
  59.     var_dump($yy_subpatterns);
  60.     $this->yybegin(self::THREE);
  61. }
  62. number number "." numerals {
  63.     echo "rule 3\n";
  64.     var_dump($this->value);
  65.     echo "    rule 3 subpatterns: \n";
  66.     var_dump($yy_subpatterns);
  67. }
  68. whitespace {
  69.     echo "whitespace\n";
  70.     echo "    whitespace subpatterns: \n";
  71.     var_dump($yy_subpatterns);
  72.     return false; // skip this token (do not return it)
  73. }
  74. blah {
  75.     echo "blah\n";
  76.     echo "    blah subpatterns: \n";
  77.     var_dump($yy_subpatterns);
  78.     var_dump($this->value);
  79. }
  80. blahblah {
  81.     echo "blahblah\n";
  82.     echo "    blahblah subpatterns: \n";
  83.     var_dump($yy_subpatterns);
  84.     var_dump($this->value);
  85. }
  86. */
  87. /*!lex2php
  88. %statename TWO
  89. alpha alpha {
  90.     echo "alpha alpha (state TWO)\n";
  91.     var_dump($this->value);
  92.     $this->yypopstate();
  93. }
  94. */
  95. /*!lex2php
  96. %statename THREE
  97. "$" number {
  98.     echo "number (state THREE)\n";
  99.     $this->yybegin(self::START);
  100. }
  101. */
  102. }
  103.  
  104. $a new TestLexer('a_AB1yk $09.1 a$B_b$1 #testtesthihi <a href="http://www.example.com/s/style.css">');
  105. $a->yylex();
  106. var_dump('advance: ' $a->value);
  107. $a->yylex();
  108. var_dump('advance: ' $a->value);
  109. $a->yylex();
  110. var_dump('advance: ' $a->value);
  111. $a->yylex();
  112. var_dump('advance: ' $a->value);
  113. $a->yylex();
  114. var_dump('advance: ' $a->value);
  115. $a->yylex();
  116. var_dump('advance: ' $a->value);
  117. $a->yylex();
  118. var_dump('advance: ' $a->value);
  119. $a->yylex();
  120. var_dump('advance: ' $a->value);
  121. $a->yylex();
  122. var_dump('advance: ' $a->value);

Documentation generated on Sun, 02 Jul 2006 08:51:30 -0400 by phpDocumentor 1.3.0