Open mingodad opened 3 years ago
Cool! Thanks for sharing. I was actually working on a grammar for wax too, in BNF, it isn't quite polished yet so I haven't put it in the repo. Seems working in that tool too!
/* WAX BNF (SUBSET, WIP) */
prgm ::= stmt | stmt prgm | comment | comment prgm
expr ::= atom | type | stmt | comment
stmt ::= (begin op end) | (begin op space params end)
params ::= expr | expr space params
atom ::= ident | int | float | str
/* symbols */
lparen ::= "(" | "[" | "{"
rparen ::= ")" | "]" | "}"
begin ::= (space lparen space) | (lparen space) | (space lparen) | lparen
end ::= (space rparen space) | (rparen space) | (space rparen) | rparen
space ::= (" " | "\t" | "\n") | ((" " | "\t" | "\n") space)
/* keywords */
op ::= "return" | "result" | "struct" | "insert" | "remove" | "extern" |
"param" | "local" | "while" | "alloc" | "slice" | "print" | "break" |
"func" | "then" | "else" | "call" | "cast" | "free" | "null" |
"get" | "set" | "let" | "for" | "asm" |
"if" | "do" | "<<" | ">>" | "=" | "&&" | "||" | ">=" | "<=" | "<>" | "??" |
"+" | "-" | "*" | "/" | "^" | "%" | "&" | "|" | "!" | "~" | "<" | ">" | "#" | "?"
/* types */
type ::= primtype | arrtype | maptype
primtype ::= "int" | "float" | "str"
vectype ::= begin "vec" space int space type end
arrtype ::= begin "arr" space type end
maptype ::= begin "map" space primtype space type end
/* charset, numbers etc */
ident ::= letter | letter alphanum
quote ::= "''"
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
numint ::= digit | digit numint
negint ::= "-" numint
chrint ::= "'" char "'"
int ::= chrint | numint | negint
smpflt ::= numint "." numint
sciflt ::= smpflt | smpflt "e" ( negint | numint )
float ::= "-" sciflt | sciflt
letter ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J"
| "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f"
| "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q"
| "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "_"
char ::= letter | "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">"
| "'" | "`" | "=" | "|" | "." | "," | ";" | " "
| "$" | "#" | "@" | "?" | "!" | ":" | "~" | "-"
| "^" | "/" | "+" | " "
/* etc.... */
alphanum ::= (letter | digit) | ((letter | digit) alphanum)
chars ::= char | char chars
str ::= (quote quote) | (quote chars quote)
comment ::= ";\n" | (";" chars "\n")
Playing around with https://www.bottlecaps.de/rr/ui I've got the beginning of an EBNF wax grammar to produce a railroad diagram, paste the EBNF show bellow in
Edit Grammar
then switch to tabView Diagram
.