From 479ae18be6a21f71090e2f25435f585846de152c Mon Sep 17 00:00:00 2001 From: Himbeer Date: Fri, 30 Aug 2024 11:18:29 +0200 Subject: Make number literal types postfix --- GRAMMAR.txt | 2 +- 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 diff --git a/parse.go b/parse.go index 3f42f44..289c205 100644 --- a/parse.go +++ b/parse.go @@ -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 } -- cgit v1.2.3