* @copyright 2010-2014 Justin Swanhart and André Rothe * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) * @version SVN: $Id$ * */ namespace PHPSQLParser\lexer; /** * This class holds a sorted array of characters, which are used as stop token. * On every part of the array the given SQL string will be split into single tokens. * The array must be sorted by element size, longest first (3 chars -> 2 chars -> 1 char). * * @author André Rothe * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) * */ class LexerSplitter { protected static $splitters = array("<=>", "\r\n", "!=", ">=", "<=", "<>", "<<", ">>", ":=", "\\", "&&", "||", ":=", "/*", "*/", "--", ">", "<", "|", "=", "^", "(", ")", "\t", "\n", "'", "\"", "`", ",", "@", " ", "+", "-", "*", "/", ";"); /** * @var string Regex string pattern of splitters. */ protected $splitterPattern; /** * Constructor. * * It initializes some fields. */ public function __construct() { $this->splitterPattern = $this->convertSplittersToRegexPattern( self::$splitters ); } /** * Get the regex pattern string of all the splitters * * @return string */ public function getSplittersRegexPattern () { return $this->splitterPattern; } /** * Convert an array of splitter tokens to a regex pattern string. * * @param array $splitters * * @return string */ public function convertSplittersToRegexPattern( $splitters ) { $regex_parts = array(); foreach ( $splitters as $part ) { $part = preg_quote( $part ); switch ( $part ) { case "\r\n": $part = '\r\n'; break; case "\t": $part = '\t'; break; case "\n": $part = '\n'; break; case " ": $part = '\s'; break; case "/": $part = "\/"; break; case "/\*": $part = "\/\*"; break; case "\*/": $part = "\*\/"; break; } $regex_parts[] = $part; } $pattern = implode( '|', $regex_parts ); return '/(' . $pattern . ')/'; } } ?>