scanner: # style line comment scanning implemented
This commit is contained in:
parent
9096153a34
commit
2216cd81e9
@ -120,6 +120,9 @@ func (s *Scanner) Scan() (tok token.Token) {
|
|||||||
case '"':
|
case '"':
|
||||||
tok = token.STRING
|
tok = token.STRING
|
||||||
s.scanString()
|
s.scanString()
|
||||||
|
case '#':
|
||||||
|
tok = token.COMMENT
|
||||||
|
s.scanComment(ch)
|
||||||
case '.':
|
case '.':
|
||||||
ch = s.peek()
|
ch = s.peek()
|
||||||
if isDecimal(ch) {
|
if isDecimal(ch) {
|
||||||
@ -152,6 +155,17 @@ func (s *Scanner) Scan() (tok token.Token) {
|
|||||||
return tok
|
return tok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Scanner) scanComment(ch rune) {
|
||||||
|
if ch == '#' {
|
||||||
|
// line comment
|
||||||
|
ch = s.next()
|
||||||
|
for ch != '\n' && ch >= 0 {
|
||||||
|
ch = s.next()
|
||||||
|
}
|
||||||
|
s.unread()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// scanNumber scans a HCL number definition starting with the given rune
|
// scanNumber scans a HCL number definition starting with the given rune
|
||||||
func (s *Scanner) scanNumber(ch rune) token.Token {
|
func (s *Scanner) scanNumber(ch rune) token.Token {
|
||||||
if ch == '0' {
|
if ch == '0' {
|
||||||
|
@ -30,16 +30,41 @@ func testTokenList(t *testing.T, tokenList []tokenPair) {
|
|||||||
for _, ident := range tokenList {
|
for _, ident := range tokenList {
|
||||||
tok := s.Scan()
|
tok := s.Scan()
|
||||||
if tok != ident.tok {
|
if tok != ident.tok {
|
||||||
t.Errorf("tok = %s want %s for %s\n", tok, ident.tok, ident.text)
|
t.Errorf("tok = %q want %q for %q\n", tok, ident.tok, ident.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.TokenText() != ident.text {
|
if s.TokenText() != ident.text {
|
||||||
t.Errorf("text = %s want %s", s.TokenText(), ident.text)
|
t.Errorf("text = %q want %q", s.TokenText(), ident.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestComment(t *testing.T) {
|
||||||
|
var tokenList = []tokenPair{
|
||||||
|
// {token.COMMENT, "//"},
|
||||||
|
// {token.COMMENT, "////"},
|
||||||
|
// {token.COMMENT, "// comment"},
|
||||||
|
// {token.COMMENT, "// /* comment */"},
|
||||||
|
// {token.COMMENT, "// // comment //"},
|
||||||
|
{token.COMMENT, "#"},
|
||||||
|
{token.COMMENT, "##"},
|
||||||
|
{token.COMMENT, "# comment"},
|
||||||
|
{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 + "*/"},
|
||||||
|
}
|
||||||
|
|
||||||
|
testTokenList(t, tokenList)
|
||||||
|
}
|
||||||
|
|
||||||
func TestOperator(t *testing.T) {
|
func TestOperator(t *testing.T) {
|
||||||
var tokenList = []tokenPair{
|
var tokenList = []tokenPair{
|
||||||
{token.LBRACK, "["},
|
{token.LBRACK, "["},
|
||||||
|
Loading…
Reference in New Issue
Block a user