Better parser handling

This commit is contained in:
Rafał Grodziński
2025-07-01 12:06:36 +09:00
parent 2e5e19b30d
commit 993c204596
4 changed files with 163 additions and 139 deletions

View File

@@ -23,8 +23,44 @@ This documents specifies what is the allowed syntax for statements and expressio
`<STMT>` Statement
### Overall structure
```
<Statement Meta Module>
|
+ <Statement Meta Extern Function>
+ <Statemnet Variable>
+ <Statement Function>
|
+ <Statement Block>
|
+ <Statemnet Variable>
+ <Statement Assignment>
+ <Statement Return>
+ <Statement Loop>
|
+ <Statement Block>...
+ <Statement Expression>
|
+ <Expression>
+ <Expression If-Else>
|
+ <Expression Block>...
```
### Statement Meta Extern Function
`@extern <ID> fun (: <NL>? <ID> <TYPE> (, <NL>? <ID> <TYPE>)*)? (-> <NL>? <TYPE>)?`
```
@extern sum fun:
num1 sint32,
num2 sint32 ->
sint32
```
### Statement Variable
`<ID> <TYPE> <- <Expression>`
### Statement Function
`<ID> fun (: <NL>? <ID> <TYPE> (, <NL>? <ID> <TYPE>)*)? (-> <NL>? <TYPE>)? <NL> <STMT_BLOCK> ; <NL>`
`<ID> fun (: <NL>? <ID> <TYPE> (, <NL>? <ID> <TYPE>)*)? (-> <NL>? <TYPE>)? <NL> <Statement Block> ;`
```
stuff fun
;
@@ -40,23 +76,6 @@ sint32
;
```
### Statement Meta Extern Function:
`@extern <ID> fun (: <NL>? <ID> <TYPE> (, <NL>? <ID> <TYPE>)*)? (-> <NL>? <TYPE>)? <NL>`
```
@extern sum fun:
num1 sint32,
num2 sint32 ->
sint32
```
### Statemnet Variable
`<ID> <TYPE> <- <Expression> <TER>`
```
num sint32 <- 42
```
### Statement Assignment
`<ID> <- <EXPR> <TER>`
```
@@ -92,8 +111,8 @@ i < 10
`loop (<ExpressionLogical> (, <NL>? <ExpressionLogical>)?)? <NL> <StatementBlock> ;`
### StatementReturn
`ret <Expression>`
### Statement Return
`ret <Expression>? <NL>`
### ExpressionVariable:
`<IDENT>`