aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-08-30 11:18:29 +0200
committerHimbeer <himbeer@disroot.org>2024-08-30 11:18:29 +0200
commit479ae18be6a21f71090e2f25435f585846de152c (patch)
treea9ca4eb1c24f146480806c6a5194d7bfe6de1531
parent67954167a21bc6d83cdfcd0f7e9db5f35737da3e (diff)
Make number literal types postfix
-rw-r--r--GRAMMAR.txt2
-rw-r--r--parse.go23
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
}