sql = $text; } public static function create(string $string): PageSql { $parser = new PageSql($string); $parser->parse(); return $parser; } function parse(): PageSql { $input = InputStream::fromString($this->sql); $lexer = new PageSqlLexer($input); $tokens = new CommonTokenStream($lexer); $parser = new PageSqlParser($tokens); $parser->addErrorListener(new DiagnosticErrorListener()); $parser->setBuildParseTree(true); $tree = $parser->pageSql(); /** * Performs a walk on the given parse tree starting at the root * and going down recursively with depth-first search. */ $this->listener = new PageSqlTreeListener($lexer, $parser); ParseTreeWalker::default()->walk($this->listener, $tree); return $this; } public function getExecutableSql(): string { return $this->listener->getPhysicalSql(); } public function getParameters(): array { return $this->listener->getParameters(); } public function getColumns() { return $this->listener->getColumns(); } public function __toString() { return $this->sql; } }