Compare commits

...

2 Commits

2 changed files with 23 additions and 4 deletions

View File

@ -1,19 +1,22 @@
@precedence {
annotation
typeCall
member
call
exp @left
mult @left
add @left
ascription @left
comp @left
logic @left
pipe @left
range
statement
}
@top Program {
Shebang?
statement*
(statement !statement statement*)?
}
statement[@isGroup=Statement] {
@ -52,12 +55,15 @@ expression[@isGroup=Expression] {
UnaryExpression { UnaryOp expression } |
ParenthesizedExpression { "(" expression ")" } |
IfExpression { kw<"if"> expression Body kw<"else"> Body } |
CallExpression { expression !call ArgumentList } |
// We don't currently support arbitrary expressions as the callee part of a
// function call.
CallExpression { identifier !call ArgumentList } |
ArrayExpression { "[" commaSep<expression | IntegerRange { expression !range ".." expression }> "]" } |
ObjectExpression { "{" commaSep<ObjectProperty> "}" } |
MemberExpression { expression !member "." PropertyName } |
SubscriptExpression { expression !member "[" expression "]" } |
PipeExpression { expression (!pipe PipeOperator expression)+ }
PipeExpression { expression (!pipe PipeOperator expression)+ } |
AscribedExpression { expression !ascription ":" type }
}
UnaryOp { AddOp | BangOp }
@ -75,7 +81,7 @@ LabeledArgument { ArgumentLabel Equals expression }
ArgumentList { "(" commaSep<LabeledArgument | expression> ")" }
type[@isGroup=Type] {
PrimitiveType { identifier } |
PrimitiveType { identifier !typeCall ("(" identifier ")")? } |
ArrayType { "[" type !member (";" Number "+"?)? "]" } |
ObjectType { "{" commaSep<ObjectProperty { PropertyName ":" type }> "}" }
}

View File

@ -0,0 +1,13 @@
# primitive
true: bool
==>
Program(ExpressionStatement(AscribedExpression(true, ":", PrimitiveType)))
# numeric units
3.5: number(mm)
==>
Program(ExpressionStatement(AscribedExpression(3.5, ":", PrimitiveType)))