[Script 1/4] Van SQL naar PHP

Gestart doorJenner0 reacties11 weergaven

1 berichten · pagina 1 van 1

Jenner

Lid · Topicstarter

Berichten
1.544
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo,

Ik ben sinds een paar weken bezig met een nieuw project voor mezelf. Gewoon om er dingen van te leren en dingen van op te steken. Het project houd in dat ik van een SQL query bruikbare PHP code kan maken die eigenlijk bruikbaar is.
Voorbeeld van een SQL query: "SELECT * FROM Users WHERE id = 1"
Deze wil ik kunnen omzetten naar een class die het volgende weergeeft:

Action: select
Selection: * (niet letterlijk *, maar een class die aangeeft dat het om alle info gaat)
Table: Users
Where: (Een array met classes erin met in dit geval alleen een class met id = 1)
... (Dus bv limit)


Dit wil ik zelfs zover kunnen doorvoeren dat je misschien zelfs JOIN en andere geavanceerde functies kunt gebruiken.

De werking van het proces van SQL naar PHP Object gaat in de volgende stappen:
-Lexen (alles uit elkaar halen, constante en variable zoeken en die omzetten in tokens)
-Parsen (Het opbouwen van een structuurboom van de tokens)
-Optimalisatie (Het verbeteren van de structuurboom door dingen korter te schrijven)
-Renderen (Het omzetten van de structuurboom in een uitkomst)

Omdat ik dit graag aan jullie wou laten zien, maar het wel een giga project is, dacht ik, ik verdeel het gewoon lekker op in 4 stukken. Ik heb nu de lexer af en die wil ik graag aan jullie laten zien. Gewoon wat jullie er van vinden.

Ik heb even een voorbeeldje online gezet:
http://ijanerik.nl/sqllang/indexL.php (Bekijk de bron anders is het moeilijk te lezen)

Als je zelf een SQL Query wilt invoeren moet je het volgende doen:
http://ijanerik.nl/sqllang/indexL.php?query=QUERY

Graag reactie op het idee en van de uitwerking smile
De source:
indexL.php

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/require_once"]require_once[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]library/tokens.php[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/require_once"]require_once[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]library/sqlLexer.php[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]query[/COLOR][COLOR= #007700]])) {[/COLOR]

    [COLOR= #0000BB]$string[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]query[/COLOR][COLOR= #007700]];

}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]

    [COLOR= #0000BB]$string[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"SELECT *,Users.id AS u_id FROM Users WHERE id = 1 AND id2 = abs(test) LIMIT 0,1"[/COLOR][COLOR= #007700];

}[/COLOR]

[COLOR= #0000BB]$lexer[/COLOR] [COLOR= #007700]= new[/COLOR] SqlLexer[COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$lexer[/COLOR][COLOR= #007700]->[/COLOR]lex[COLOR= #007700]([/COLOR][COLOR= #0000BB]$string[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR]false [COLOR= #007700]!==[/COLOR] [COLOR= #0000BB]$token[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$lexer[/COLOR][COLOR= #007700]->[/COLOR]nextToken[COLOR= #007700]()) {[/COLOR]

    [URL="http://www.php.net/print_r"]print_r[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$token[/COLOR][COLOR= #007700]);

}[/COLOR]
?>


library/SqlLexer.php

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/require_once"]require_once[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]charLexer.php[/COLOR][COLOR= #007700]);[/COLOR]

[COLOR= #FF8000]/**
 * De SQL lexer om een SQL string te lexen en omzetten in Tokens
 *
 * @package        Parsing
 * @subpackage    Lexer
 * @author        Jan Erik van Woerden <info@janerik.eu>
 * @version        1.0
 * @since        1.0
 */[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SqlLexer extends CharLexer implements LexerInterface [COLOR= #007700]{[/COLOR]
    
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] false[COLOR= #007700],[/COLOR] [COLOR= #0000BB]$data[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]()) {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$data[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]]) &&[/COLOR] [URL="http://www.php.net/is_bool"]is_bool[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$data[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]]))[/COLOR]
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes[COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #0000BB]$data[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]];[/COLOR]
        [URL="http://www.php.net/else"]else[/URL][COLOR= #007700];[/COLOR]
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes[COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]] =[/COLOR] false[COLOR= #007700];[/COLOR]
            
        parent[COLOR= #007700]::[/COLOR]__construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]);
    
    }[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Haal de volgende token op.
     * 
     * @return Token Geef een nieuwe token class terug.
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] nextToken[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes[COLOR= #007700][[/COLOR][COLOR= #DD0000]end[/COLOR][COLOR= #007700]] ==[/COLOR] true[COLOR= #007700])[/COLOR]
            [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];[/COLOR]
    
        [COLOR= #FF8000]//Is er nog een token in de buffer.[/COLOR]
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/empty"]empty[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_tokenBuffer[COLOR= #007700])) {[/COLOR]
    
            [URL="http://www.php.net/reset"]reset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_tokenBuffer[COLOR= #007700]);[/COLOR]
            [COLOR= #0000BB]$token[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/current"]current[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_tokenBuffer[COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/end"]end[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_tokenBuffer[COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/array_shift"]array_shift[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_tokenBuffer[COLOR= #007700]);[/COLOR]
            
            [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$token[/COLOR][COLOR= #007700];
            
        }[/COLOR]
        
        [COLOR= #0000BB]$constants[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]
                            [COLOR= #DD0000]SELECT[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]SelectToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]INSERT INTO[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]InsertToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]UPDATE[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]UpdateToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]DELETE[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]DeleteToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]FROM[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]FromToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]WHERE[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]WhereToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]LIMIT[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]LimitToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]OR[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]OrToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]AND[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]AndToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]ASC[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]AscToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]DESC[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]DeskToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]AS[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]AsToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]SET[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]SetToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]=[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]EqualToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]*[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]AsteriskToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000]([/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]OpenRoundBracketToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000])[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]CloseRoundBracketToken[/COLOR][COLOR= #007700],[/COLOR]
                            [COLOR= #DD0000],[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #DD0000]SeperateToken[/COLOR]
                        [COLOR= #007700]);[/COLOR]
        
        [COLOR= #FF8000]//Kijk of het een van de constante is.[/COLOR]
        [URL="http://www.php.net/foreach"]foreach[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$constants[/COLOR] [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$word[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$WordClass[/COLOR][COLOR= #007700]) {[/COLOR]

            [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]peekWord[COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700])) {[/COLOR]
                        
                [COLOR= #0000BB]$count[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/strlen"]strlen[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700]);[/COLOR]
                [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]([/COLOR][COLOR= #0000BB]$count[/COLOR][COLOR= #007700]);[/COLOR]
                            
                [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] [COLOR= #0000BB]$WordClass[/COLOR][COLOR= #007700]();
                
            }
                    
        }[/COLOR]
        
        
        [COLOR= #FF8000]//Is het karakter een letter.[/COLOR]
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/ctype_alpha"]ctype_alpha[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])) {[/COLOR]
        
            [COLOR= #0000BB]$buffer[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];[/COLOR]
            
            [URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]()) {[/COLOR]
            
                [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/ctype_alpha"]ctype_alpha[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])[/COLOR] OR [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000].[/COLOR] OR [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]_[/COLOR][COLOR= #007700]) {[/COLOR]
                    
                    [COLOR= #0000BB]$buffer[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];
                    
                }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
                        
                    [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]([/COLOR][COLOR= #007700]) {[/COLOR]
                        
                        [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] FunctionToken[COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$buffer[/COLOR][COLOR= #007700]));
                        
                    }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
                        
                        [URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
                        
                    }
                    
                }
            
            }[/COLOR]
            
            [COLOR= #0000BB]$exploded[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/explode"]explode[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000].[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$buffer[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]2[/COLOR][COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/count"]count[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$exploded[/COLOR][COLOR= #007700]) ==[/COLOR] [COLOR= #0000BB]2[/COLOR][COLOR= #007700]) {[/COLOR]
                        
                [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] VariableToken[COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$exploded[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]]),[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$exploded[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]]));
                        
            }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
                        
                [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] VariableToken[COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$buffer[/COLOR][COLOR= #007700]));
                            
            }[/COLOR]
            
        [COLOR= #FF8000]//Is het karakter een teken om een tekst citaat te opennen.[/COLOR]
        [COLOR= #007700]}[/COLOR] [URL="http://www.php.net/elseif"]elseif[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]"[/COLOR] OR [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]""[/COLOR][COLOR= #007700]) {[/COLOR]
            
            [COLOR= #0000BB]$stopChar[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];[/COLOR]
            [COLOR= #0000BB]$nextRealChar[/COLOR] [COLOR= #007700]=[/COLOR] false[COLOR= #007700];[/COLOR] [COLOR= #FF8000]//If the previous char a "" (backslash) is[/COLOR]
            
            [URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]()) {[/COLOR]
                    
                [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #0000BB]$stopChar[/COLOR] [COLOR= #007700]&&[/COLOR] [COLOR= #0000BB]$realChar[/COLOR] [COLOR= #007700]==[/COLOR] false[COLOR= #007700]) {[/COLOR]
                        
                    [COLOR= #0000BB]$closed[/COLOR] [COLOR= #007700]=[/COLOR] true[COLOR= #007700];[/COLOR]
                    [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]();[/COLOR]
                    [URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
                            
                }[/COLOR] [URL="http://www.php.net/elseif"]elseif[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]==[/COLOR] [COLOR= #DD0000]\[/COLOR][COLOR= #007700]) {[/COLOR]
                    [COLOR= #0000BB]$nextRealChar[/COLOR] [COLOR= #007700]=[/COLOR] true[COLOR= #007700];
                }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
                    [COLOR= #0000BB]$buffer[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];
                }
                        
            }[/COLOR]
                    
            [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$closed[/COLOR] [COLOR= #007700]!=[/COLOR] true[COLOR= #007700])[/COLOR]
                [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]errors[COLOR= #007700][] =[/COLOR] [COLOR= #DD0000]Je hebt aan het einde van je tekst niet afgesloten.[/COLOR][COLOR= #007700];[/COLOR]
            
            [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] TextToken[COLOR= #007700]([/COLOR][COLOR= #0000BB]$buffer[/COLOR][COLOR= #007700]);[/COLOR]
        
        [COLOR= #FF8000]//Is het karakter een nummer.[/COLOR]
        [COLOR= #007700]}[/COLOR] [URL="http://www.php.net/elseif"]elseif[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/ctype_digit"]ctype_digit[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])) {[/COLOR]
            
            [COLOR= #0000BB]$buffer[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];[/COLOR]
                
            [URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]()) {[/COLOR]
                
                [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/ctype_digit"]ctype_digit[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])) {[/COLOR]
                    [COLOR= #0000BB]$buffer[/COLOR] [COLOR= #007700].=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700];
                }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
                    [URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
                }
                
            }[/COLOR]
            
            [URL="http://www.php.net/return"]return[/URL] [COLOR= #007700]new[/COLOR] NumberToken[COLOR= #007700]([/COLOR][COLOR= #0000BB]$buffer[/COLOR][COLOR= #007700]);[/COLOR]
            
        [COLOR= #FF8000]//Is het karakter een spatie[/COLOR]
        [COLOR= #007700]}[/COLOR] [URL="http://www.php.net/elseif"]elseif[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/ctype_space"]ctype_space[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])) {[/COLOR]
            
            [URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]consume[COLOR= #007700]()) {[/COLOR]
                
                [URL="http://www.php.net/if"]if[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/ctype_space"]ctype_space[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700])) {[/COLOR]
                    [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]nextToken[COLOR= #007700]();
                }
                
            }
            
        }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
        
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]errors[COLOR= #007700][] =[/COLOR] [COLOR= #DD0000]The character "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char[COLOR= #007700].[/COLOR][COLOR= #DD0000]" is not a used char in SQL (pointer: "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer[COLOR= #007700].[/COLOR][COLOR= #DD0000]")[/COLOR][COLOR= #007700];
        
        }[/COLOR]
        
        [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];
    
    }

}[/COLOR]
?>


library/tokens.php

[COLOR= #0000BB]<?php[/COLOR]
interface Token [COLOR= #007700]{ }[/COLOR]

abstract [URL="http://www.php.net/class"]class[/URL] DataToken implements Token [COLOR= #007700]{[/COLOR]
    
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_content[/COLOR][COLOR= #007700];[/COLOR]

    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]) {[/COLOR]
    
        [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_content [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$content[/COLOR][COLOR= #007700];
    
    }[/COLOR]
    
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getContent[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_content[COLOR= #007700];
    
    }[/COLOR]
    
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __toString[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]getContent[COLOR= #007700]();
    
    }

}[/COLOR]

abstract [URL="http://www.php.net/class"]class[/URL] ConstantToken implements Token [COLOR= #007700]{ }[/COLOR]

[COLOR= #FF8000]//Types[/COLOR]
abstract [URL="http://www.php.net/class"]class[/URL] ActionToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
abstract [URL="http://www.php.net/class"]class[/URL] ParamToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
abstract [URL="http://www.php.net/class"]class[/URL] SpecialCharsToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]

[URL="http://www.php.net/class"]class[/URL] VariableToken extends DataToken [COLOR= #007700]{[/COLOR]

    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_column[/COLOR][COLOR= #007700];[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_table[/COLOR][COLOR= #007700];[/COLOR]

    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$column[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$table[/COLOR] [COLOR= #007700]=[/COLOR] false[COLOR= #007700]) {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$table[/COLOR] [COLOR= #007700]!=[/COLOR] false[COLOR= #007700])[/COLOR]
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_table [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$table[/COLOR][COLOR= #007700];[/COLOR]
            
        [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_column [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$column[/COLOR][COLOR= #007700];[/COLOR]
        
        parent[COLOR= #007700]::[/COLOR]__construct[COLOR= #007700]([/COLOR][COLOR= #DD0000][/COLOR][COLOR= #007700]);[/COLOR]
        [URL="http://www.php.net/unset"]unset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_content[COLOR= #007700]);
    
    }[/COLOR]
    
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getColumn[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_column[COLOR= #007700];
    
    }[/COLOR]
    
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getTable[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_table[COLOR= #007700];
    
    }
}[/COLOR]

[URL="http://www.php.net/class"]class[/URL] FunctionToken extends DataToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] TextToken extends DataToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] NumberToken extends DataToken [COLOR= #007700]{ }[/COLOR]

[COLOR= #FF8000]//Constant words[/COLOR]
[URL="http://www.php.net/class"]class[/URL] FromToken extends ParamToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] WhereToken extends ParamToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] OrderToken extends ParamToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] LimitToken extends ParamToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SetToken extends ParamToken [COLOR= #007700]{ }[/COLOR]

[URL="http://www.php.net/class"]class[/URL] JoinToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] OrToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] AndToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] AscToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] DeskToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] AsToken extends ConstantToken [COLOR= #007700]{ }[/COLOR]

[COLOR= #FF8000]//Special Chars[/COLOR]
[URL="http://www.php.net/class"]class[/URL] AsteriskToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] OpenRoundBracketToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] CloseRoundBracketToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SeparateToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] EqualToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SeperateToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SemicolonToken extends SpecialCharsToken [COLOR= #007700]{ }[/COLOR]

[COLOR= #FF8000]//Actions[/COLOR]
[URL="http://www.php.net/class"]class[/URL] SelectToken extends ActionToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] InsertToken extends ActionToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] UpdateToken extends ActionToken [COLOR= #007700]{ }[/COLOR]
[URL="http://www.php.net/class"]class[/URL] DeleteToken extends ActionToken [COLOR= #007700]{ }[/COLOR]


library/lexerInterface.php

[COLOR= #0000BB]<?php[/COLOR]
[COLOR= #FF8000]/**
 * De standaard functies voor een lexer in een interface
 *
 * @package        Parsing
 * @subpackage    Lexer
 * @author        Jan Erik van Woerden <info@janerik.eu>
 * @version        1.0
 * @since        1.0
 * @interface
 */[/COLOR]
interface LexerInterface [COLOR= #007700]{[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Maak alles gereed om te gaan lexen.
     *
     * @param string $content
     * @param array $data
     * @return void
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] false[COLOR= #007700],[/COLOR] [COLOR= #0000BB]$data[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]());[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Haal de volgende token op.
     * 
     * @return Token Geef een nieuwe token class terug.
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] nextToken[COLOR= #007700]();[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Verhoog de pointer
     *
     * @param number $count Het aantal keer dat je de pointer wilt opschuiven.
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] consume[COLOR= #007700]([/COLOR][COLOR= #0000BB]$count[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]1[/COLOR][COLOR= #007700]);
    
}[/COLOR]
?>


library/charLexer.php

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/require_once"]require_once[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]lexerInterface.php[/COLOR][COLOR= #007700]);[/COLOR]

[COLOR= #FF8000]/**
 * Dit is een abstracte class om te lexen per letter. Scant elk karakter per stuk.
 *
 * @package        Parsing
 * @subpackage    Lexer
 * @author        Jan Erik van Woerden <info@janerik.eu>
 * @version        1.0
 * @since        1.0
 * @abstract
 */[/COLOR]
 
abstract [URL="http://www.php.net/class"]class[/URL] CharLexer implements LexerInterface [COLOR= #007700]{[/COLOR]

    [COLOR= #FF8000]/**
     * Alle beschikbare modussen met de standaard stand
     *
     * @var array
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_modes[/COLOR][COLOR= #007700];[/COLOR]
    
    [COLOR= #FF8000]/**
     * Het momentele karakter
     *
     * @var string|num
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_char[/COLOR][COLOR= #007700];[/COLOR]
    
    [COLOR= #FF8000]/**
     * Het punt van de pointer van de array
     *
     * @var number
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_pointer[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];[/COLOR]
    
    [COLOR= #FF8000]/**
     * Alle karakters in een array
     *
     * @var array
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #0000BB]$_chars[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
    
    [COLOR= #FF8000]/**
     * Het aantal karakters in de karakter array
     * Puur voor het versnellen van het proces bij grote reeksen.
     *
     * @var number
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_charsCount[/COLOR][COLOR= #007700];[/COLOR]
    
    [COLOR= #FF8000]/**
     * De content
     *
     * @var string
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_content[/COLOR][COLOR= #007700];[/COLOR]
    
    [COLOR= #FF8000]/**
     * Als er nog tokens zijn van de vorige keer wordt die eerst weergegeven.
     *
     * @var array
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #0000BB]$_tokenBuffer[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
    
    [COLOR= #FF8000]/**
     * Alle errors die zijn gemaakt komen in deze array
     *
     * @var array
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #0000BB]$errors[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Als er content is voer dan functie (@see:self::lex) uit.
     *
     * @param string $content De content die je wilt lexen.
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR] [COLOR= #007700]=[/COLOR] false[COLOR= #007700],[/COLOR] [COLOR= #0000BB]$data[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]()) {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/empty"]empty[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]))[/COLOR]
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]lex[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]);
    
    }[/COLOR]
    
    [COLOR= #FF8000]/**
     * Installeer de content en maak alle variable gereed
     *
     * @param string $content De content die je wilt lexen.
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] lex[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]) {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/is_string"]is_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700])) {[/COLOR]
        
        
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]
                                [COLOR= #DD0000]end[/COLOR] [COLOR= #007700]=>[/COLOR] false
                            [COLOR= #007700]);[/COLOR]
            
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_content [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$content[/COLOR][COLOR= #007700];[/COLOR]                
            
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_chars [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]strToChars[COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_content[COLOR= #007700]);[/COLOR]
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_charsCount [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/count"]count[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_chars[COLOR= #007700]);
        
        }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
            [COLOR= #0000BB]$error[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]A content is a string not something else.[/COLOR][COLOR= #007700];[/COLOR]
            
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]errors[COLOR= #007700][] =[/COLOR] [COLOR= #0000BB]$error[/COLOR][COLOR= #007700];[/COLOR]
            throw [COLOR= #007700]new[/COLOR] Exception[COLOR= #007700]([/COLOR][COLOR= #0000BB]$error[/COLOR][COLOR= #007700]);
        
        }
    
    }[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Verhoog de pointer
     *
     * @param number $count Het aantal keer dat je de pointer wilt opschuiven.
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] consume[COLOR= #007700]([/COLOR][COLOR= #0000BB]$count[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]1[/COLOR][COLOR= #007700]) {[/COLOR]
        [COLOR= #0000BB]$counts[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700];[/COLOR]
        
        [URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$counts[/COLOR] [COLOR= #007700]<[/COLOR] [COLOR= #0000BB]$count[/COLOR][COLOR= #007700]) {[/COLOR]
        
            [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer[COLOR= #007700]++;[/COLOR]
            
            
            [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer [COLOR= #007700]<[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_charsCount[COLOR= #007700]) {[/COLOR]
            
            
                [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_char [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_chars[COLOR= #007700][[/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer[COLOR= #007700]];
                
            }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
            
                [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes[COLOR= #007700][[/COLOR][COLOR= #DD0000]end[/COLOR][COLOR= #007700]] =[/COLOR] true[COLOR= #007700];[/COLOR]
                [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];
            
            }[/COLOR]
            
            [COLOR= #0000BB]$counts[/COLOR][COLOR= #007700]++;
            
        }[/COLOR]
        
        [URL="http://www.php.net/return"]return[/URL] true[COLOR= #007700];
    
    }[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Bekijk een volgend karakter in de reeks met alle karakters
     *
     * @param number $count Het aantal karakters dat je vooruit wilt kijken.
     * @return string|bool|number
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #007700]function[/COLOR] peekNextChar[COLOR= #007700]([/COLOR][COLOR= #0000BB]$count[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]1[/COLOR][COLOR= #007700]) {[/COLOR]
    
        [COLOR= #0000BB]$next[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer [COLOR= #007700]+[/COLOR] [COLOR= #0000BB]$count[/COLOR][COLOR= #007700];[/COLOR]
        
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_chars[COLOR= #007700][[/COLOR][COLOR= #0000BB]$next[/COLOR][COLOR= #007700]])) {[/COLOR]
        
            [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_chars[COLOR= #007700][[/COLOR][COLOR= #0000BB]$next[/COLOR][COLOR= #007700]];
        
        }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
        
            [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];
        
        }
    
    }[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Zoek vanaf het karakter dat nu bezig is een karakter reeks. 
     * (Dus het eerste karakter is het karakter dat nu bezig is)
     *
     * @param string $word Het woord dat je wilt zoeken
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #007700]function[/COLOR] peekWord[COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700]) {[/COLOR]
    
        [COLOR= #0000BB]$chars[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]strToChars[COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700]);[/COLOR]
        
        [URL="http://www.php.net/foreach"]foreach[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$chars[/COLOR] [COLOR= #007700]as[/COLOR] [COLOR= #0000BB]$plus[/COLOR] [COLOR= #007700]=>[/COLOR] [COLOR= #0000BB]$char[/COLOR][COLOR= #007700]) {[/COLOR]
            
            [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]peekNextChar[COLOR= #007700]([/COLOR][COLOR= #0000BB]$plus[/COLOR][COLOR= #007700])) !=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$char[/COLOR][COLOR= #007700])) {[/COLOR]
            
                [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];
            
            }
            
        
        }[/COLOR]
        
        [URL="http://www.php.net/return"]return[/URL] true[COLOR= #007700];
    
    }[/COLOR]
    
    [COLOR= #FF8000]/**
     * Het maakt het woord/karakter schoon van alle niet benodigde materialen
     *
     * @param string $word Het woord/karakter dat je wilt opschonen
     * @return string Het woord/karakter opgeschoond.
     */[/COLOR]
    [URL="http://www.php.net/protected"]protected[/URL] [COLOR= #007700]function[/COLOR] clean[COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700]) {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_modes[COLOR= #007700][[/COLOR][COLOR= #DD0000]case_sensitive[/COLOR][COLOR= #007700]] ==[/COLOR] false[COLOR= #007700])[/COLOR]
            [COLOR= #0000BB]$word[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/strtolower"]strtolower[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$word[/COLOR][COLOR= #007700]);[/COLOR]
            
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$word[/COLOR][COLOR= #007700];
    
    }[/COLOR]
    
    
    [COLOR= #FF8000]/**
     * Zet de content in in een array met allemaal losse karakters.
     *
     * @param string $content De content
     * @return array
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] strToChars[COLOR= #007700]([/COLOR][COLOR= #0000BB]$content[/COLOR][COLOR= #007700]) {[/COLOR]
        
        [COLOR= #0000BB]$return[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]();[/COLOR]
        
        [URL="http://www.php.net/foreach"]foreach[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/preg_split"]preg_split[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]//[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$content[/COLOR][COLOR= #007700]) as[/COLOR] [COLOR= #0000BB]$char[/COLOR][COLOR= #007700]) {[/COLOR]
    
                [URL="http://www.php.net/if"]if[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/empty"]empty[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$char[/COLOR][COLOR= #007700])) {[/COLOR]
                
                    [COLOR= #0000BB]$return[/COLOR][COLOR= #007700][] =[/COLOR] [COLOR= #0000BB]$char[/COLOR][COLOR= #007700];
                
                }
                
        }[/COLOR]
        
        [URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$return[/COLOR][COLOR= #007700];
    
    }[/COLOR]
    
    [COLOR= #FF8000]/**
     * Kijk of de lexer aan het einde is.
     *
     * @return bool
     */[/COLOR]
    [URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] isEnd[COLOR= #007700]() {[/COLOR]
    
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_pointer [COLOR= #007700]<[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]_charsCount[COLOR= #007700]) {[/COLOR]
        
            [URL="http://www.php.net/return"]return[/URL] false[COLOR= #007700];
        
        }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
        
            [URL="http://www.php.net/return"]return[/URL] true[COLOR= #007700];
        
        }
    
    }

}[/COLOR]
?>
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren