Skip to content

Instantly share code, notes, and snippets.

@jubianchi
Created June 11, 2015 13:42
Show Gist options
  • Save jubianchi/4eed70c361cb161c3c1a to your computer and use it in GitHub Desktop.
Save jubianchi/4eed70c361cb161c3c1a to your computer and use it in GitHub Desktop.
cat test.sql | vendor/bin/hoa compiler:pp sql.pp 0 -s --visitor dump
# namespace token name token value offset
--------------------------------------------------------------------------------
0 default T_SELECT SELECT 0
1 default T_IDENTIFIER foo 7
2 default T_AS AS 11
3 default T_IDENTIFIER bar 14
4 default T_FROM from 18
5 default T_OPAREN ( 23
6 default T_SELECT select 24
7 default T_NUMBER 1 31
8 default T_AS as 33
9 default T_IDENTIFIER foo 36
10 default T_CPAREN ) 39
11 default T_SEMICOLON ; 40
12 default T_SELECT SELECT 42
13 default T_SQUOTE ' 49
14 string T_STRING hello 50
15 string T_SQUOTE ' 55
16 default T_SEMICOLON ; 56
17 default T_SELECT SELECT 58
18 default T_DQUOTE " 65
19 string T_STRING world 66
20 string T_DQUOTE " 71
21 default T_SEMICOLON ; 72
22 default EOF 75
> #queries
> > #query
> > > #select
> > > > #fields
> > > > > #field
> > > > > > token(T_IDENTIFIER, foo)
> > > > > > #alias
> > > > > > > token(T_IDENTIFIER, bar)
> > > > #from
> > > > > #select
> > > > > > #fields
> > > > > > > #field
> > > > > > > > #value
> > > > > > > > > token(T_NUMBER, 1)
> > > > > > > > #alias
> > > > > > > > > token(T_IDENTIFIER, foo)
> > #queries
> > > #query
> > > > #select
> > > > > #fields
> > > > > > #field
> > > > > > > #value
> > > > > > > > #string
> > > > > > > > > token(string:T_STRING, hello)
> > > #queries
> > > > #query
> > > > > #select
> > > > > > #fields
> > > > > > > #field
> > > > > > > > #value
> > > > > > > > > #string
> > > > > > > > > > token(string:T_STRING, world)
# namespace token name token value offset
--------------------------------------------------------------------------------
0 default T_SELECT SELECT 0
1 default T_IDENTIFIER foo 7
2 default T_AS AS 11
3 default T_IDENTIFIER bar 14
4 default T_FROM from 18
5 default T_OPAREN ( 23
6 default T_SELECT select 24
7 default T_NUMBER 1 31
8 default T_AS as 33
9 default T_IDENTIFIER foo 36
10 default T_CPAREN ) 39
11 default T_SEMICOLON ; 40
12 default T_SELECT SELECT 42
13 default T_SQUOTE ' 49
14 string T_STRING hello 50
15 string T_SQUOTE ' 55
16 default T_SEMICOLON ; 56
17 default T_SELECT SELECT 58
18 default T_DQUOTE " 65
19 string T_STRING world 66
20 string T_DQUOTE " 71
21 default T_SEMICOLON ; 72
22 default EOF 75
> #queries
> > #query
> > > #select
> > > > #fields
> > > > > #field
> > > > > > token(T_IDENTIFIER, foo)
> > > > > > #alias
> > > > > > > token(T_IDENTIFIER, bar)
> > > > #from
> > > > > #select
> > > > > > #fields
> > > > > > > #field
> > > > > > > > #value
> > > > > > > > > token(T_NUMBER, 1)
> > > > > > > > #alias
> > > > > > > > > token(T_IDENTIFIER, foo)
> > #query
> > > #select
> > > > #fields
> > > > > #field
> > > > > > #value
> > > > > > > #string
> > > > > > > > token(string:T_STRING, hello)
> > #query
> > > #select
> > > > #fields
> > > > > #field
> > > > > > #value
> > > > > > > #string
> > > > > > > > token(string:T_STRING, world)
%skip space [\s\t\r\n]
%token T_SELECT (?i)select
%token T_UPDATE (?i)update
%token T_INSERT (?i)insert
%token T_DELETE (?i)delete
%token T_FROM (?i)from
%token T_AS (?i)as
%token T_INTO (?i)into
%token T_VALUES (?i)values
%token T_COMMA ,
%token T_SEMICOLON ;
%token T_SQUOTE ' -> string
%token T_DQUOTE " -> string
%token T_OPAREN \(
%token T_CPAREN \)
%token T_NUMBER \-?(0|[1-9]\d*)(\.\d+)?([eE][\+\-]?\d+)?
%token T_IDENTIFIER [a-zA-Z0-9]+
%token string:T_STRING [^"']+
%token string:T_SQUOTE ' -> default
%token string:T_DQUOTE " -> default
#queries:
query() (::T_SEMICOLON:: queries()?)?
#query:
select() | insert()
#select:
::T_SELECT:: fields() from()?
#insert:
::T_INSERT:: ::T_INTO:: <T_IDENTIFIER> ::T_VALUES:: values()
#from:
::T_FROM:: (<T_IDENTIFIER> | ::T_OPAREN:: select() ::T_CPAREN::)
#fields:
field() (::T_COMMA:: field())*
#field:
(<T_IDENTIFIER> | value()) alias()?
#alias:
::T_AS:: <T_IDENTIFIER>
#values:
::T_OPAREN:: value() (::T_COMMA:: value())* ::T_CPAREN::
#value:
string() | <T_NUMBER>
#string:
sstring() | dstring()
sstring:
::T_SQUOTE:: <T_STRING> ::T_SQUOTE::
dstring:
::T_DQUOTE:: <T_STRING> ::T_DQUOTE::
SELECT foo AS bar from (select 1 as foo);
SELECT 'hello';
SELECT "world";
@jubianchi
Copy link
Author

Question hoa/compiler :

Une idée ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment