10 KiB
10 KiB
Dotnet
- install dotnet 6
- install antlr
- cd WaifuGrammar
- antlr4 -Dlanguage=CSharp
-o WaifuGrammar/grammar_out/waifu
-package waifu -listener -visitor
-lib WaifuGrammar/grammar
WaifuGrammar/grammar/Waifu2.g4 - Develop in grammar/Waifu2.g4 and Program.cs
Notes
- Final implementation in rust? Althought rantlr4 doesn't have rust support. So we will have to write parser and lexer from sctach
character | meaning | p | z |
---|---|---|---|
~ | Unused | Negation | |
` | Unused | Infix maybe | |
! | Unused | unsafe unwrap, far future | |
@ | Unused | maybe a valid starting character for ID | |
# | Comments | Use # for single line ## for multiline comments | |
$ | Unused | I don't like using this anywhere. Useless. | |
% | OP_MOD | ||
^ | OP_POWER | Not xor. | |
& | OP_AND | Not bitwise and. | |
* | OP_MULT | ||
( | Grouping | Also range, non inclusive | |
) | Grouping | Also range, non inclusive | |
- | OP_MINUS, Number negation | Maybe in ranges? - makes more sense than .. however that becomes a problem with negative numbers, unless we force the whistespace | |
_ | Unused | Not sure, doesn't seem like a useful symbol. we could use it for digit grouping in integers like a lot of modern languages do | |
= | OP_EQUALS | ||
+ | OP_PLUS | Not allowed as a number prefix. It's ugly and serves no purpose. +X is X. - is useful to flip the sign, we shouldn't add this 'for symetries' | |
[ | Unused | Inclusive Range | |
] | Unused | Inclusive range | |
{ | Unused | Should be used to define a struct. { WS NL fields functions NL } NL | |
} | Unused | struct close | |
; | Unused | no idea. | |
: | Type prefix. very nice. | Very nice. | |
" | Unused | No idea. | |
' | Strings | Should be used both for single and multiline strings. Should be able to specify multiple in a row in order to require that many to close without escaping any lower number of quotes in the string | |
PIPE LOl | OP_OR | ||
< | OP_LESS_THAN | ||
> | OP_GREATER_THAN | ||
, | Unused | ? | |
. | Unused | Object navigation is an obvious one, but I'd like to explore other possiblities. One idea is to have . act as a "value of the expression in the line above, which would be very useful for using values without assigning them to variables, 'auto piping' | |
? | Unused | Prefix for 'if' and 'switch' like thing. ? EXPR NL INDENT (VAL WS expr)+ (_ WS expr)? | |
/ | OP_DIV | ||
\ | UNUSED | I'm not 100% opposed but i don't like the idea of using this as an escape character. |