feat/schema: add ast and test
This commit is contained in:
@@ -16,25 +16,30 @@ name: _name_initial {_name_char};
|
||||
!whitespace: ' ' | '\t' | '\n' | '\r';
|
||||
!comment: ';' {.} '\n';
|
||||
|
||||
<<>>
|
||||
<<
|
||||
import (
|
||||
"azalea/schema/ast"
|
||||
"azalea/schema/token"
|
||||
)
|
||||
>>
|
||||
Schema: ExprList;
|
||||
ExprList
|
||||
: Expr
|
||||
| ExprList Expr
|
||||
: Expr <<ast.NewExprList($0)>>
|
||||
| ExprList Expr <<ast.AppendExpr($0, $1)>>
|
||||
;
|
||||
ValList
|
||||
: Val
|
||||
| ValList Val
|
||||
: Val <<ast.NewValList($0)>>
|
||||
| ValList Val <<ast.AppendVal($0, $1)>>
|
||||
;
|
||||
Val
|
||||
: string
|
||||
| number
|
||||
| name
|
||||
| Expr
|
||||
: string <<ast.NewStringVal($T0)>>
|
||||
| number <<ast.NewNumberVal($T0)>>
|
||||
| name <<ast.NewNameVal($T0)>>
|
||||
| Expr <<ast.NewExprVal($0)>>
|
||||
;
|
||||
Expr
|
||||
: "(" name Val Val ")"
|
||||
| "(" name Val ")"
|
||||
| "(" name ")"
|
||||
| "(" "." ValList ")"
|
||||
: "(" name Val Val ")" <<ast.NewExpr($T1, $2, $3)>>
|
||||
| "(" name Val ")" <<ast.NewExpr($T1, $2, nil)>>
|
||||
| "(" name ")" <<ast.NewExpr($T1, nil, nil)>>
|
||||
| "(" "." ValList ")" <<ast.ListExpr($2)>>
|
||||
;
|
||||
Reference in New Issue
Block a user