Trying to add units parsing, but getting shift/reduce conflict
This commit is contained in:
@ -1,19 +1,22 @@
|
|||||||
@precedence {
|
@precedence {
|
||||||
annotation
|
annotation
|
||||||
|
typeCall
|
||||||
member
|
member
|
||||||
call
|
call
|
||||||
exp @left
|
exp @left
|
||||||
mult @left
|
mult @left
|
||||||
add @left
|
add @left
|
||||||
|
ascription @left
|
||||||
comp @left
|
comp @left
|
||||||
logic @left
|
logic @left
|
||||||
pipe @left
|
pipe @left
|
||||||
range
|
range
|
||||||
|
statement
|
||||||
}
|
}
|
||||||
|
|
||||||
@top Program {
|
@top Program {
|
||||||
Shebang?
|
Shebang?
|
||||||
statement*
|
(statement !statement statement*)?
|
||||||
}
|
}
|
||||||
|
|
||||||
statement[@isGroup=Statement] {
|
statement[@isGroup=Statement] {
|
||||||
@ -52,13 +55,15 @@ expression[@isGroup=Expression] {
|
|||||||
UnaryExpression { UnaryOp expression } |
|
UnaryExpression { UnaryOp expression } |
|
||||||
ParenthesizedExpression { "(" expression ")" } |
|
ParenthesizedExpression { "(" expression ")" } |
|
||||||
IfExpression { kw<"if"> expression Body kw<"else"> Body } |
|
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 }> "]" } |
|
ArrayExpression { "[" commaSep<expression | IntegerRange { expression !range ".." expression }> "]" } |
|
||||||
ObjectExpression { "{" commaSep<ObjectProperty> "}" } |
|
ObjectExpression { "{" commaSep<ObjectProperty> "}" } |
|
||||||
MemberExpression { expression !member "." PropertyName } |
|
MemberExpression { expression !member "." PropertyName } |
|
||||||
SubscriptExpression { expression !member "[" expression "]" } |
|
SubscriptExpression { expression !member "[" expression "]" } |
|
||||||
PipeExpression { expression (!pipe PipeOperator expression)+ } |
|
PipeExpression { expression (!pipe PipeOperator expression)+ } |
|
||||||
AscribedExpression { expression ":" type }
|
AscribedExpression { expression !ascription ":" type }
|
||||||
}
|
}
|
||||||
|
|
||||||
UnaryOp { AddOp | BangOp }
|
UnaryOp { AddOp | BangOp }
|
||||||
@ -76,7 +81,7 @@ LabeledArgument { ArgumentLabel Equals expression }
|
|||||||
ArgumentList { "(" commaSep<LabeledArgument | expression> ")" }
|
ArgumentList { "(" commaSep<LabeledArgument | expression> ")" }
|
||||||
|
|
||||||
type[@isGroup=Type] {
|
type[@isGroup=Type] {
|
||||||
PrimitiveType { identifier } |
|
PrimitiveType { identifier !typeCall ("(" identifier ")")? } |
|
||||||
ArrayType { "[" type !member (";" Number "+"?)? "]" } |
|
ArrayType { "[" type !member (";" Number "+"?)? "]" } |
|
||||||
ObjectType { "{" commaSep<ObjectProperty { PropertyName ":" type }> "}" }
|
ObjectType { "{" commaSep<ObjectProperty { PropertyName ":" type }> "}" }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,11 @@
|
|||||||
true: bool
|
true: bool
|
||||||
|
|
||||||
==>
|
==>
|
||||||
Program(ExpressionStatement(VariableDefinition,
|
Program(ExpressionStatement(AscribedExpression(true, ":", PrimitiveType)))
|
||||||
Equals,
|
|
||||||
ArrayExpression(IntegerRange(Number,
|
# numeric units
|
||||||
Number))))
|
|
||||||
|
3.5: number(mm)
|
||||||
|
|
||||||
|
==>
|
||||||
|
Program(ExpressionStatement(AscribedExpression(3.5, ":", PrimitiveType)))
|
||||||
|
|||||||
Reference in New Issue
Block a user