From aa4cc2b45ebadf4cea16d1e27149e13669f3a5fc Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 24 Jul 2023 14:18:27 +0200 Subject: scanner: compute numerical values (#2) The conversion to numerical values is done by the scanner so it's only done once. This will simplify and accelerate vm0 and the code generator. --- scanner/scan_test.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'scanner/scan_test.go') diff --git a/scanner/scan_test.go b/scanner/scan_test.go index dd48faf..6a54d8e 100644 --- a/scanner/scan_test.go +++ b/scanner/scan_test.go @@ -50,29 +50,29 @@ func TestScan(t *testing.T) { tests := []struct{ src, result, errStr string }{ // Simple tokens: separators, identifiers, numbers, operators. {"", "[]", ""}, - {" abc + 5", "[{3 1 abc 0 0} {7 3 + 0 0} {9 2 5 0 0}]", ""}, - {"abc0+5 ", "[{0 1 abc0 0 0} {4 3 + 0 0} {5 2 5 0 0}]", ""}, - {"a+5\na=x-4", "[{0 1 a 0 0} {1 3 + 0 0} {2 2 5 0 0} {3 4 0 0} {4 1 a 0 0} {5 3 = 0 0} {6 1 x 0 0} {7 3 - 0 0} {8 2 4 0 0}]", ""}, + {" abc + 5", "[{3 1 abc 0 0 } {7 3 + 0 0 } {9 2 5 0 0 5}]", ""}, + {"abc0+5 ", "[{0 1 abc0 0 0 } {4 3 + 0 0 } {5 2 5 0 0 5}]", ""}, + {"a+5\na=x-4", "[{0 1 a 0 0 } {1 3 + 0 0 } {2 2 5 0 0 5} {3 4 0 0 } {4 1 a 0 0 } {5 3 = 0 0 } {6 1 x 0 0 } {7 3 - 0 0 } {8 2 4 0 0 4}]", ""}, // Strings. - {`return "hello world" + 4`, `[{0 1 return 0 0} {7 5 "hello world" 1 1} {21 3 + 0 0} {23 2 4 0 0}]`, ""}, - {`print(4 * (3+7))`, "[{0 1 print 0 0} {5 6 (4 * (3+7)) 1 1}]", ""}, + {`return "hello world" + 4`, `[{0 1 return 0 0 } {7 5 "hello world" 1 1 } {21 3 + 0 0 } {23 2 4 0 0 4}]`, ""}, + {`print(4 * (3+7))`, "[{0 1 print 0 0 } {5 6 (4 * (3+7)) 1 1 }]", ""}, {`"foo`, "[]", "1:1: block not terminated"}, {`abc def "foo truc`, "[]", "2:6: block not terminated"}, {`"ab\"`, "[]", "1:1: block not terminated"}, - {`"ab\\"`, `[{0 5 "ab\\" 1 1}]`, ""}, + {`"ab\\"`, `[{0 5 "ab\\" 1 1 }]`, ""}, {`"ab\\\"`, "[]", "1:1: block not terminated"}, - {`"ab\\\\"`, `[{0 5 "ab\\\\" 1 1}]`, ""}, + {`"ab\\\\"`, `[{0 5 "ab\\\\" 1 1 }]`, ""}, {`"abc def"`, "[]", "1:1: block not terminated"}, - {"`hello\nworld`", "[{0 5 `hello\nworld` 1 1}]", ""}, + {"`hello\nworld`", "[{0 5 `hello\nworld` 1 1 }]", ""}, // Nested blocks. // {`f("a)bc")+1, 3)`, "[{0 1 f } {1 6 (\"a)bc\", 3) (}]", ""}, {"2* (3+4", "[]", "1:4: block not terminated"}, - {`("fo)o")+1`, "[{0 6 (\"fo)o\") 1 1} {8 3 + 0 0} {9 2 1 0 0}]", ""}, - {`"foo""bar"`, "[{0 5 \"foo\" 1 1} {5 5 \"bar\" 1 1}]", ""}, + {`("fo)o")+1`, "[{0 6 (\"fo)o\") 1 1 } {8 3 + 0 0 } {9 2 1 0 0 1}]", ""}, + {`"foo""bar"`, "[{0 5 \"foo\" 1 1 } {5 5 \"bar\" 1 1 }]", ""}, } for _, test := range tests { -- cgit v1.2.3