From 6e23b0404d6cd41783710c48d19290de61627e4a Mon Sep 17 00:00:00 2001 From: Fatih Arslan Date: Mon, 5 Oct 2015 13:36:28 +0300 Subject: [PATCH] scanner: implement comments --- scanner/scanner.go | 22 +++++++++++++++++++--- scanner/scanner_test.go | 14 +++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/scanner/scanner.go b/scanner/scanner.go index 7b09498..52e0657 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -124,13 +124,12 @@ func (s *Scanner) Scan() (tok token.Token) { tok = token.COMMENT s.scanComment(ch) case '.': + tok = token.PERIOD ch = s.peek() if isDecimal(ch) { tok = token.FLOAT ch = s.scanMantissa(ch) ch = s.scanExponent(ch) - } else { - tok = token.PERIOD } case '[': tok = token.LBRACK @@ -156,13 +155,30 @@ func (s *Scanner) Scan() (tok token.Token) { } func (s *Scanner) scanComment(ch rune) { + // look for /* - style comments + if ch == '/' && s.peek() == '*' { + for { + if ch < 0 { + s.err("comment not terminated") + break + } + + ch0 := ch + ch = s.next() + if ch0 == '*' && ch == '/' { + break + } + } + } + + // single line comments if ch == '#' || ch == '/' { - // line comment ch = s.next() for ch != '\n' && ch >= 0 { ch = s.next() } s.unread() + return } } diff --git a/scanner/scanner_test.go b/scanner/scanner_test.go index 2bbe534..eaa09c8 100644 --- a/scanner/scanner_test.go +++ b/scanner/scanner_test.go @@ -54,13 +54,13 @@ func TestComment(t *testing.T) { {token.COMMENT, "# /* comment */"}, {token.COMMENT, "# # comment #"}, {token.COMMENT, "#" + f100}, - // {token.COMMENT, "/**/"}, - // {token.COMMENT, "/***/"}, - // {token.COMMENT, "/* comment */"}, - // {token.COMMENT, "/* // comment */"}, - // {token.COMMENT, "/* /* comment */"}, - // {token.COMMENT, "/*\n comment\n*/"}, - // {token.COMMENT, "/*" + f100 + "*/"}, + {token.COMMENT, "/**/"}, + {token.COMMENT, "/***/"}, + {token.COMMENT, "/* comment */"}, + {token.COMMENT, "/* // comment */"}, + {token.COMMENT, "/* /* comment */"}, + {token.COMMENT, "/*\n comment\n*/"}, + {token.COMMENT, "/*" + f100 + "*/"}, } testTokenList(t, tokenList)