fix parsing
This commit is contained in:
@@ -4,8 +4,8 @@ export const boringGrammar = ohm.grammar(String.raw`
|
||||
Boringlang {
|
||||
ReturnStatement = "return" Expression ";"
|
||||
LetStatement = "let" identifier (":" TypeUsage)? "=" Expression ";"
|
||||
AssignmentStatement = VariableUsage "=" Expression ";"
|
||||
| StructGetter "=" Expression ";"
|
||||
AssignmentStatement = identifier "=" Expression ";" -- identifier
|
||||
| StructGetter "=" Expression ";" -- getter
|
||||
ExpressionStatement = Expression ";"
|
||||
Statement = ExpressionStatement
|
||||
| LetStatement
|
||||
@@ -19,27 +19,33 @@ export const boringGrammar = ohm.grammar(String.raw`
|
||||
LiteralStructField = identifier ":" Expression
|
||||
LiteralStruct = identifier "{" ListOf<LiteralStructField, ","> "}"
|
||||
identifier = (letter | "_")+(letter | digit | "_")*
|
||||
FunctionCall = Expression "(" ListOf<Expression, ","> ")"
|
||||
StructGetter = Expression "." identifier
|
||||
VariableUsage = identifier
|
||||
IfExpression = "if" "(" Expression ")" Block ("else" Block)?
|
||||
Term = LiteralInt
|
||||
Path = Path "::" identifier -- nested
|
||||
| identifier -- base
|
||||
PrimaryExpression = LiteralInt
|
||||
| LiteralFloat
|
||||
| LiteralBool
|
||||
| LiteralString
|
||||
| LiteralStruct
|
||||
| IfExpression
|
||||
| Block
|
||||
| Path -- path
|
||||
| "(" Expression ")" -- parens
|
||||
| VariableUsage
|
||||
Factor = Factor "*" Term -- mult
|
||||
| Factor "/" Term -- div
|
||||
| Term
|
||||
Expression = Expression "+" Factor -- plus
|
||||
| Expression "-" Factor -- minus
|
||||
| StructGetter
|
||||
| FunctionCall
|
||||
| Factor
|
||||
StructExpression = LiteralStruct
|
||||
| Block
|
||||
| IfExpression
|
||||
| PrimaryExpression
|
||||
MemberExpression = MemberExpression "." identifier -- structGetter
|
||||
| StructExpression
|
||||
CallExpression = CallExpression "." identifier -- structGetter
|
||||
| CallExpression "(" ListOf<Expression, ","> ")" -- functionCall
|
||||
| MemberExpression "(" ListOf<Expression, ","> ")" -- memberFunctionCall
|
||||
| MemberExpression
|
||||
MultExpression = MultExpression "*" CallExpression -- mult
|
||||
| MultExpression "/" CallExpression -- div
|
||||
| CallExpression
|
||||
AddExpression = Expression "+" MultExpression -- plus
|
||||
| Expression "-" MultExpression -- minus
|
||||
| MultExpression
|
||||
Expression = AddExpression
|
||||
Block = "{" Statement* Expression? "}"
|
||||
NamedTypeUsage = identifier
|
||||
TypeUsage = NamedTypeUsage
|
||||
|
||||
Reference in New Issue
Block a user