feat/schema: add ast and test

This commit is contained in:
mae
2026-01-27 21:57:38 -06:00
parent 5f9467e851
commit 1fd09335cd
9 changed files with 198 additions and 492 deletions

View File

@@ -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)>>
;