cvs: pear /DBA Sql_lex.php

From: Date: Fri, 12 Jul 2002 17:55:06 +0000
Subject: cvs: pear /DBA Sql_lex.php
Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-5081@lists.php.net to get a copy of this message
busterb Fri Jul 12 13:55:06 2002 EDT Modified files: /pear/DBA Sql_lex.php Log: fixed handling of unknown tokens Index: pear/DBA/Sql_lex.php diff -u pear/DBA/Sql_lex.php:1.2 pear/DBA/Sql_lex.php:1.3 --- pear/DBA/Sql_lex.php:1.2 Thu Jul 11 19:47:56 2002 +++ pear/DBA/Sql_lex.php Fri Jul 12 13:55:05 2002 @@ -1,4 +1,9 @@ <?php +/** + * A Sql lexigraphical analyser + * Inspired by the msql lexer + */ + include 'phptype.php'; // {{{ token definitions @@ -164,9 +169,7 @@ var $tokPtr = 0; var $tokStart = 0; - var $prev = null; - var $rep = null; - var $text = null; + var $text = ''; var $tokLen = 0; var $lineno = 0; var $string; @@ -198,20 +201,18 @@ // {{{ lex($this->string) function lex() { - $this->prev = $this->rep; if ($state == 1000) { - $this->prev = null; return 0; } $state = 0; while (1) { - //echo 'State '.$state.', '.$this->string[$this->tokPtr]."\n"; + //echo 'State '.$state; switch($state) { // {{{ State 0 : Start of token CASE(0): $this->tokPtr = $this->tokStart; - $this->text = NULL; + $this->text = ''; $this->tokLen = 0; $c = $this->get(); while ($c == ' ' || $c == '\t' || $c == '\n') { @@ -221,6 +222,7 @@ $c = $this->skip(); $this->tokLen = 1; } + //echo ", $c\n"; if ($c == '\'') { $state = 12; break; @@ -259,7 +261,7 @@ $state = 14; break; } - if ($c == 0) { + if ($c == false) { $state = 1000; break; } @@ -295,7 +297,6 @@ return ($tokval); } else { $this->text = substr($this->string, $this->tokStart, $this->tokLen); - $lval = $this->text; $this->tokStart = $this->tokPtr; return (SQL_IDENT); } @@ -318,7 +319,6 @@ CASE(4): $this->unget(); $this->text = substr($this->string, $this->tokStart, $this->tokLen); - $lval = $this->text; $this->tokStart = $this->tokPtr; return (SQL_IDENT); // }}} @@ -342,7 +342,6 @@ CASE(6): $this->unget(); $this->text = substr($this->string,$this->tokStart,$this->tokLen); - $lval = $this->text; $this->tokStart = $this->tokPtr; return (SQL_NUM); break; @@ -371,7 +370,6 @@ CASE(8): $this->unget(); $this->text = substr($this->string, $this->tokStart, $this->tokLen); - $lval = $this->text; $this->tokStart = $this->tokPtr; return (SQL_REAL_NUM); // }}} @@ -424,12 +422,12 @@ while (!$bail) { switch ($this->get()) { case null: - $this->text = false; + $this->text = ''; $bail = true; break; case '\\': if ($this->get()) { - $this->text = false; + $this->text = ''; $bail = true; } break; @@ -440,7 +438,6 @@ } } // $this->text = _readTextLiteral($this->tokStart); - $lval = $this->text; if ($this->text) { $state = 13; break; @@ -517,7 +514,6 @@ CASE(19): $this->unget(); $this->text = substr($this->tokStart,$this->tokLen); - $lval = $this->text; $this->tokStart = $this->tokPtr; return (SQL_SYS_VAR); // }}} @@ -527,14 +523,13 @@ $this->revert(); $c = $this->get(); $this->text = $c; - $lval = $this->text; $this->tokStart = $this->tokPtr; return ($this->text[0]); // }}} // {{{ State 1000 : End Of Input CASE(1000): - $this->text = $lval = '*end of input*'; + $this->text = '*end of input*'; $this->tokStart = $this->tokPtr; return (SQL_END_OF_INPUT); // }}} @@ -544,13 +539,5 @@ // }}} } -} - -$lexer = new Lexer(); -$lexer->string = "create table dogfood int 23.4 99"; -$token = $lexer->lex(); -while ($token != SQL_END_OF_INPUT) { - echo $token."\n"; - $token = $lexer->lex(); } ?>

« previous php.pear.cvs (#5081) next »