Group array support; ToString() support

This commit is contained in:
eanderton
2014-07-07 20:48:29 -04:00
parent b28c2d0c9e
commit c8b5633273
5 changed files with 274 additions and 16 deletions
+40 -3
View File
@@ -34,8 +34,11 @@ const (
tokenFloat
tokenLeftBracket
tokenRightBracket
tokenDoubleLeftBracket
tokenDoubleRightBracket
tokenDate
tokenKeyGroup
tokenKeyGroupArray
tokenComma
tokenEOL
)
@@ -386,9 +389,43 @@ func lexString(l *lexer) stateFn {
func lexKeyGroup(l *lexer) stateFn {
l.ignore()
l.pos += 1
l.emit(tokenLeftBracket)
return lexInsideKeyGroup
l.pos += 1
if l.peek() == '[' {
// token '[[' signifies an array of anonymous key groups
l.ignore()
l.pos += 1
l.emit(tokenDoubleLeftBracket)
return lexInsideKeyGroupArray
} else {
// vanilla key group
l.emit(tokenLeftBracket)
return lexInsideKeyGroup
}
}
func lexInsideKeyGroupArray(l *lexer) stateFn {
for {
if l.peek() == ']' {
if l.pos > l.start {
l.emit(tokenKeyGroupArray)
}
l.ignore()
l.pos += 1
if l.peek() != ']' {
break // error
}
l.ignore()
l.pos += 1
l.emit(tokenDoubleRightBracket)
return lexVoid
}
if l.next() == eof {
break
}
}
return l.errorf("unclosed key group array")
}
func lexInsideKeyGroup(l *lexer) stateFn {