-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1051c25
commit 2fe56f6
Showing
12 changed files
with
223 additions
and
1,143 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
module ::= statement* | ||
; | ||
statement ::= variable-def | type-def | return-stmt | expr | ||
; | ||
variable-def ::= LET-KEYWORD IDENTIFIER EQUALS expr | ||
; | ||
type-def ::= TYPE-KEYWORD IDENTIFIER TODO | ||
; | ||
return-stmt ::= RETURN-KEYWORD expr? | ||
; | ||
expr ::= sub-expr (infix-op sub-expr)* | ||
; | ||
sub-expr ::= prefix-op operand | ||
| operand postfix-op? | ||
; | ||
operand ::= if-expr | ||
| fn-expr | ||
| O-PAREN expr C-PAREN | ||
| STRING | ||
| CHAR | ||
| NUMBER | ||
| IDENTIFIER | ||
| type | ||
; | ||
infix-op ::= add-op | sub-op | mul-op | div-op | exp-op | mod-op | access-op | eq-op | ne-op | ||
| ge-op | le-op | gt-op | lt-op | and-op | or-op; | ||
add-op ::= PLUS; | ||
sub-op ::= MINUS; | ||
mul-op ::= ASTERISK; | ||
div-op ::= SLASH; | ||
exp-op ::= CARET; | ||
mod-op ::= PERCENT; | ||
access-op ::= PERIOD; | ||
eq-op ::= EQUALS EQUALS; | ||
ne-op ::= EXCL EQUALS; | ||
ge-op ::= GREATER-EQ; | ||
le-op ::= LESS-EQ; | ||
gt-op ::= C-ANGLE; | ||
lt-op ::= O-ANGLE; | ||
and-op ::= AMPERSAND AMPERSAND; | ||
or-op ::= PIPE PIPE; | ||
|
||
prefix-op ::= add-op | sub-op | not-op | spread-op | ||
; | ||
not-op ::= EXCL | ||
; | ||
spread-op ::= PERIOD PERIOD | ||
; | ||
|
||
postfix-op ::= call-op | ||
; | ||
call-op ::= O-PAREN args C-PAREN | ||
; | ||
args ::= expr (COMMA expr)* COMMA? | ||
; | ||
fn-expr ::= O-PAREN params C-PAREN COLON type block | ||
; | ||
params ::= param (COMMA param)* COMMA? | ||
; | ||
param ::= IDENTIFIER COLON type | ||
; | ||
block ::= O-BRACE statement* C-BRACE | ||
| O-BRACE C-BRACE | ||
; | ||
type ::= IDENTIFIER (O-ANGLE type-params C-ANGLE)? | ||
; | ||
type-params ::= type (COMMA type)* COMMA? | ||
; | ||
if-expr ::= IF-KEYWORD expr block (ELSE-KEYWORD block)? | ||
; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,111 +0,0 @@ | ||
program ::= statements_ | ||
; | ||
|
||
statements_ ::= statement statements_ | ||
| E | ||
; | ||
|
||
statement ::= variable-def | type-def | return-stmt | expr | ||
; | ||
|
||
variable-def ::= LET-KEYWORD_ IDENTIFIER EQUALS_ expr | ||
; | ||
|
||
type-def ::= TYPE-KEYWORD_ IDENTIFIER TODO | ||
; | ||
|
||
return-stmt ::= RETURN-KEYWORD_ expr | ||
| RETURN-KEYWORD_ | ||
; | ||
|
||
expr ::= expr_ | ||
; | ||
|
||
expr_ ::= expr__ infix-operator expr_ | ||
| expr__ | ||
; | ||
|
||
expr__ ::= prefix-op operand | ||
| operand postfix-op | ||
| operand | ||
; | ||
|
||
operand ::= if-expr | ||
| function-expr | ||
| OPEN-PAREN_ expr CLOSE-PAREN_ | ||
| STRING | ||
| CHAR | ||
| NUMBER | ||
| IDENTIFIER | ||
| type | ||
; | ||
|
||
infix-operator ::= GREATER-EQ | LESS-EQ | PLUS | MINUS | ASTERISK | SLASH | CARET | PERCENT | PERIOD | EQUALS-OP | ||
| NOT-EQUALS-OP | greater | less | AND | OR | ||
; | ||
|
||
greater ::= CLOSE-CHEVRON_ | ||
; | ||
|
||
less ::= OPEN-CHEVRON_ | ||
; | ||
|
||
prefix-op ::= PLUS | MINUS | EXCL | SPREAD | ||
; | ||
|
||
postfix-op ::= call-op | ||
; | ||
|
||
call-op ::= OPEN-PAREN_ args CLOSE-PAREN_ | ||
; | ||
|
||
args ::= args_ | ||
; | ||
|
||
args_ ::= expr COMMA_ args_ | ||
| expr trailing-comma_ | ||
| E | ||
; | ||
|
||
function-expr ::= OPEN-PAREN_ params CLOSE-PAREN_ COLON_ type block | ||
; | ||
|
||
block ::= OPEN-BRACE_ statements_ CLOSE-BRACE_ | ||
| OPEN-BRACE_ CLOSE-BRACE_ | ||
; | ||
|
||
params ::= params_ | ||
; | ||
|
||
params_ ::= param COMMA_ params_ | ||
| param trailing-comma_ | ||
| param | ||
| E | ||
; | ||
|
||
param ::= IDENTIFIER COLON_ type | ||
; | ||
|
||
trailing-comma_ ::= COMMA_ | ||
| E | ||
; | ||
|
||
type ::= IDENTIFIER OPEN-CHEVRON_ type-params CLOSE-CHEVRON_ | ||
| IDENTIFIER | ||
; | ||
|
||
type-params ::= type-params_ | ||
| E | ||
; | ||
|
||
type-params_ ::= type COMMA_ type-params_ | ||
| type trailing-comma_ | ||
| E | ||
; | ||
|
||
if-expr ::= IF-KEYWORD_ expr block else-expr_ | ||
; | ||
|
||
else-expr_ ::= ELSE-KEYWORD_ block | ||
| E | ||
; | ||
Oops, something went wrong.