radarrplexorganizrnginxsonarrdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							102 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							102 lines
						
					
					
						
							2.5 KiB
						
					
					
				| Simple Parser Example | |
| ===================== | |
|  | |
| Extend the ``Doctrine\Common\Lexer\AbstractLexer`` class and implement | |
| the ``getCatchablePatterns``, ``getNonCatchablePatterns``, and ``getType`` | |
| methods. Here is a very simple example lexer implementation named ``CharacterTypeLexer``. | |
| It tokenizes a string to ``T_UPPER``, ``T_LOWER`` and``T_NUMBER`` tokens: | |
|  | |
| .. code-block:: php | |
|     <?php | |
|  | |
|     use Doctrine\Common\Lexer\AbstractLexer; | |
|  | |
|     class CharacterTypeLexer extends AbstractLexer | |
|     { | |
|         const T_UPPER =  1; | |
|         const T_LOWER =  2; | |
|         const T_NUMBER = 3; | |
|  | |
|         protected function getCatchablePatterns() | |
|         { | |
|             return array( | |
|                 '[a-bA-Z0-9]', | |
|             ); | |
|         } | |
|  | |
|         protected function getNonCatchablePatterns() | |
|         { | |
|             return array(); | |
|         } | |
|  | |
|         protected function getType(&$value) | |
|         { | |
|             if (is_numeric($value)) { | |
|                 return self::T_NUMBER; | |
|             } | |
|  | |
|             if (strtoupper($value) === $value) { | |
|                 return self::T_UPPER; | |
|             } | |
|  | |
|             if (strtolower($value) === $value) { | |
|                 return self::T_LOWER; | |
|             } | |
|         } | |
|     } | |
|  | |
| Use ``CharacterTypeLexer`` to extract an array of upper case characters: | |
|  | |
| .. code-block:: php | |
|     <?php | |
|  | |
|     class UpperCaseCharacterExtracter | |
|     { | |
|         private $lexer; | |
|  | |
|         public function __construct(CharacterTypeLexer $lexer) | |
|         { | |
|             $this->lexer = $lexer; | |
|         } | |
|  | |
|         public function getUpperCaseCharacters($string) | |
|         { | |
|             $this->lexer->setInput($string); | |
|             $this->lexer->moveNext(); | |
|  | |
|             $upperCaseChars = array(); | |
|             while (true) { | |
|                 if (!$this->lexer->lookahead) { | |
|                     break; | |
|                 } | |
|  | |
|                 $this->lexer->moveNext(); | |
|  | |
|                 if ($this->lexer->token['type'] === CharacterTypeLexer::T_UPPER) { | |
|                     $upperCaseChars[] = $this->lexer->token['value']; | |
|                 } | |
|             } | |
|  | |
|             return $upperCaseChars; | |
|         } | |
|     } | |
|  | |
|     $upperCaseCharacterExtractor = new UpperCaseCharacterExtracter(new CharacterTypeLexer()); | |
|     $upperCaseCharacters = $upperCaseCharacterExtractor->getUpperCaseCharacters('1aBcdEfgHiJ12'); | |
|  | |
|     print_r($upperCaseCharacters); | |
|  | |
| The variable ``$upperCaseCharacters`` contains all of the upper case | |
| characters: | |
|  | |
| .. code-block:: php | |
|     Array | |
|     ( | |
|         [0] => B | |
|         [1] => E | |
|         [2] => H | |
|         [3] => J | |
|     ) | |
|  | |
| This is a simple example but it should demonstrate the low level API | |
| that can be used to build more complex parsers.
 | |
| 
 |