Refine and add statements.

This commit is contained in:
Jesse Brault 2025-09-07 15:56:34 -05:00
parent 17f5d2d62d
commit 3f534bf7fd
2 changed files with 182 additions and 54 deletions

View File

@ -311,3 +311,133 @@ Member:
on: rule_present
- identifier
- type_use
# Statements
Statement:
rules:
- VariableDeclaration
- AssignmentStatement
- ExpressionStatement
- UseStatement
- IfElseStatement
- IfStatementStatement
- WhileStatement
- ForStatement
VariableDeclaration:
children:
- let_kw:
rule: Let
skip: true
- is_mut:
rule: Mut
build:
type: boolean
on: rule_present
- identifier
- type_use:
optional: true
- expression:
optional: true
AssignmentStatement:
children:
- left:
rule: Expression
- right:
rule: Expression
ExpressionStatement:
children:
- expression
IfStatement:
children:
- if_kw:
rule: If
skip: true
- expression
- then_kw:
rule: Then
skip: true
- statements:
rule: Statement
vec: true
- end_kw:
rule: End
skip: true
IfElseStatement:
children:
- if_else_first
- if_else_ifs:
rule: IfElseIf
vec: true
- if_else_else
IfElseFirst:
children:
- if_kw:
rule: If
skip: true
- expression
- then_kw:
rule: Then
skip: true
- statements:
rule: Statement
vec: true
IfElseIf:
children:
- else_kw:
rule: Else
skip: true
- if_kw:
rule: If
skip: true
- expression
- then_kw:
rule: Then
skip: true
- statements:
rule: Statement
vec: true
IfElseElse:
children:
- else_kw:
rule: Else
skip: true
- statements:
rule: Statement
vec: true
- end_kw:
rule: End
skip: true
WhileStatement:
children:
- while_kw:
rule: While
skip: true
- expression
- do_kw:
rule: Do
skip: true
- statements:
rule: Statement
vec: true
- end_kw:
rule: End
skip: true
ForStatement:
children:
- for_kw:
rule: For
skip: true
- identifier
- in_kw:
rule: In
skip: true
- expression
- do_kw:
rule: Do
skip: true
- statement:
rule: Statement
vec: true
- end_kw:
rule: End
vec: true

View File

@ -30,6 +30,8 @@ Alias = { "alias" }
True = { "true" }
False = { "false" }
Use = { "use" }
Then = { "then" }
Do = { "do" }
End = { "end" }
Companion = { "comp" }
@ -535,29 +537,15 @@ Member = {
// Statements
BlockStatement = {
"{"
~ Statement*
~ Expression?
~ "}"
}
Statement = {
(
VariableDeclaration
| AssignmentStatement
| CallStatement
| ReturnStatement
| UseStatement
)
~ Semicolon
| (
BlockStatement
| IfElseStatement
| IfStatement
| WhileStatement
| ForStatement
)
VariableDeclaration
| AssignmentStatement
| ExpressionStatement
| UseStatement
| IfElseStatement
| IfStatement
| WhileStatement
| ForStatement
}
VariableDeclaration = {
@ -574,63 +562,61 @@ AssignmentStatement = {
~ Expression
}
CallStatement = {
PrimaryExpression
~ ObjectAccess?
~ ParenthesesCall
~ (
ObjectAccess
| ParenthesesCall
| PlusPlus
| MinusMinus
)*
}
ReturnStatement = {
Return
~ Expression?
ExpressionStatement = {
Expression
}
IfStatement = {
If
~ "("
~ Expression
~ ")"
~ BlockStatement
~ Then
~ Statement*
~ End
}
IfElseStatement = {
IfStatement
~ ElseIf*
~ ElseBlock?
IfElseFirst
~ IfElseIf*
~ IfElseElse
}
ElseIf = {
Else
~ IfStatement
IfElseFirst = {
If
~ Expression
~ Then
~ Statement*
}
ElseBlock = {
IfElseIf = {
Else
~ BlockStatement
~ If
~ Expression
~ Then
~ Statement*
}
IfElseElse = {
Else
~ Statement*
~ End
}
WhileStatement = {
While
~ "("
~ Expression
~ ")"
~ BlockStatement
~ Do
~ Statement*
~ End
}
ForStatement = {
For
~ "("
~ Identifier
~ In
~ Expression
~ ")"
~ BlockStatement
~ Do
~ Statement*
~ End
}
// Expressions
@ -740,6 +726,18 @@ ObjectIndex = {
// Calls
CallExpression = {
PrimaryExpression
~ ObjectAccess?
~ ParenthesesCall
~ (
ObjectAccess
| ParenthesesCall
| PlusPlus
| MinusMinus
)*
}
ParenthesesCall = {
TurboFish?
~ "("