diff options
author | Himbeer <himbeer@disroot.org> | 2024-08-30 11:18:29 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-08-30 11:18:29 +0200 |
commit | 479ae18be6a21f71090e2f25435f585846de152c (patch) | |
tree | a9ca4eb1c24f146480806c6a5194d7bfe6de1531 | |
parent | 67954167a21bc6d83cdfcd0f7e9db5f35737da3e (diff) |
Make number literal types postfix
-rw-r--r-- | GRAMMAR.txt | 2 | ||||
-rw-r--r-- | parse.go | 23 |
2 files changed, 9 insertions, 16 deletions
diff --git a/GRAMMAR.txt b/GRAMMAR.txt index f14a11e..c687722 100644 --- a/GRAMMAR.txt +++ b/GRAMMAR.txt @@ -24,4 +24,4 @@ primary -> grouping | literal grouping -> "(" expression ")" literal -> string | number string -> STRING* -number -> IDENTIFIER "(" NUMBER ")" +number -> NUMBER IDENTIFIER @@ -740,31 +740,24 @@ func parseStringSegment(toks *tokens) (*string, error) { } func parseNumber(toks *tokens) (*numberExpr, error) { - typeTok, ok := toks.consumeToken() + numTok, ok := toks.consumeToken() if !ok { return nil, unexpectedEOF } - if typeTok.kind != identifier { - return nil, expected{want: identifier, got: typeTok} - } - - if err := toks.mustMatch(lparen); err != nil { - return nil, err + if numTok.kind != number { + toks.unreadToken() + return nil, nil } - numTok, ok := toks.consumeToken() + typeTok, ok := toks.consumeToken() if !ok { return nil, unexpectedEOF } - if numTok.kind != number { - return nil, expected{want: number, got: numTok} - } - - if err := toks.mustMatch(rparen); err != nil { - return nil, err + if typeTok.kind != identifier { + return nil, expected{want: identifier, got: typeTok} } - return &numberExpr{typ: typeTok.value, s: numTok.value, ln: typeTok.line}, nil + return &numberExpr{typ: typeTok.value, s: numTok.value, ln: numTok.line}, nil } |