... | ... | @@ -141,16 +141,21 @@ Assume we have two bit streams for tokens: `valueToken` (explained above) and `a |
|
|
errAfterValueMinusStr = tokenNextMinusStr &~(Comma | RBrace)
|
|
|
//
|
|
|
// process strings as both key and value
|
|
|
afterTokenStr = Advance(atDepth & str & objSpan, 1)
|
|
|
strAtDepth = atDepth & str
|
|
|
afterTokenStr = Advance(strAtDepth & objSpan, 1)
|
|
|
tokenNextStr = ScanThru(afterNested | afterTokenStr, whitespace)
|
|
|
errAfterValueStr = tokenNextStr &~(Comma | RBrace | Colon)
|
|
|
//
|
|
|
// join errors
|
|
|
errAfterValue = errAfterValueMinusStr | errAfterValueStr
|
|
|
//
|
|
|
// Every Comma or Colon must be followed by a value
|
|
|
advCommaColon = Advance((Comma | Colon) & objSpan, 1)
|
|
|
errAfterCommaOrColon = ScanTo(advCommaColon, anyToken) & ~ (nested | valueToken)
|
|
|
// Every Colon must be followed by a value
|
|
|
advColon = Advance(Colon & objSpan, 1)
|
|
|
errAfterColon = ScanTo(advColon, anyToken) & ~ (nested | valueToken)
|
|
|
//
|
|
|
// Every Comma must be followed by a key string
|
|
|
advComma = Advance(Comma & objSpan, 1)
|
|
|
errAfterComma = ScanTo(advComma, anyToken) & ~ strAtDepth
|
|
|
//
|
|
|
// After the LBrace we must have either a value or an RBrace.
|
|
|
scanObjStartAnyToken = ScanTo(Advance(objStart, 1), anyToken)
|
... | ... | |