... | @@ -111,9 +111,12 @@ after any value or Comma. |
... | @@ -111,9 +111,12 @@ after any value or Comma. |
|
errAfterValue = tokenNext &~(Comma | RBrak)
|
|
errAfterValue = tokenNext &~(Comma | RBrak)
|
|
//
|
|
//
|
|
// Every Comma must be followed by a value
|
|
// Every Comma must be followed by a value
|
|
errAfterComma = ScanTo(Advance(Comma & arraySpan, 1), anyToken) & ~ (nested | valueToken)
|
|
advCommaArrSpan = Advance(Comma & arraySpan, 1)
|
|
|
|
errAfterComma = ScanTo(advCommaArrSpan, anyToken) & ~ (nested | valueToken)
|
|
|
|
//
|
|
// After the LBrak we must have either a value or an RBrak.
|
|
// After the LBrak we must have either a value or an RBrak.
|
|
errAfterLBrak = ScanTo(Advance(arrayStart, 1), anyToken) & ~ (nested | valueToken | RBrak)
|
|
scanArrAnyToken = ScanTo(Advance(arrayStart, 1), anyToken)
|
|
|
|
errAfterLBrak = scanArrAnyToken & ~ (nested | valueToken | RBrak)
|
|
```
|
|
```
|
|
|
|
|
|
### Validating objects
|
|
### Validating objects
|
... | @@ -133,25 +136,27 @@ Assume we have two bit streams for tokens: `valueToken` (explained above) and `a |
... | @@ -133,25 +136,27 @@ Assume we have two bit streams for tokens: `valueToken` (explained above) and `a |
|
// Now validate that every value or nested item is followed
|
|
// Now validate that every value or nested item is followed
|
|
// either by a comma or a the end RBrace.
|
|
// either by a comma or a the end RBrace.
|
|
afterNested = Advance(nested & objSpan, 1) & atDepth
|
|
afterNested = Advance(nested & objSpan, 1) & atDepth
|
|
|
|
//
|
|
// process all values that are not strings
|
|
// process all values that are not strings
|
|
afterTokenMinusStr = Advance(valueTokenMinusStr & objSpan, 1)
|
|
afterTokenMinusStr = Advance(valueTokenMinusStr & objSpan, 1)
|
|
tokenNextMinusStr = ScanThru(afterNested | afterTokenMinusStr, whitespace)
|
|
tokenNextMinusStr = ScanThru(afterNested | afterTokenMinusStr, whitespace)
|
|
errAfterValueMinusStr = tokenNextMinusStr &~(Comma | RBrace)
|
|
errAfterValueMinusStr = tokenNextMinusStr &~(Comma | RBrace)
|
|
|
|
//
|
|
// process strings as both key and value
|
|
// process strings as both key and value
|
|
afterTokenStr = Advance(str & objSpan, 1)
|
|
afterTokenStr = Advance(str & objSpan, 1)
|
|
tokenNextStr = ScanThru(afterNested | afterTokenStr, whitespace)
|
|
tokenNextStr = ScanThru(afterNested | afterTokenStr, whitespace)
|
|
errAfterValueStr = tokenNextStr &~(Comma | RBrace | Colon)
|
|
errAfterValueStr = tokenNextStr &~(Comma | RBrace | Colon)
|
|
|
|
//
|
|
// join errors
|
|
// join errors
|
|
errAfterValue = errAfterValueMinusStr | errAfterValueStr
|
|
errAfterValue = errAfterValueMinusStr | errAfterValueStr
|
|
|
|
|
|
//
|
|
//
|
|
// Every Comma must be followed by a value
|
|
// Every Comma or Colon must be followed by a value
|
|
errAfterComma = ScanTo(Advance(Comma & arraySpan, 1), anyToken) & ~ (nested | valueToken)
|
|
advCommaColon = Advance((Comma | Colon) & objSpan, 1)
|
|
// After the LBrak we must have either a value or an RBrak.
|
|
errAfterCommaOrColon = ScanTo(advCommaColon, anyToken) & ~ (nested | valueToken)
|
|
errAfterLBrak = ScanTo(Advance(arrayStart, 1), anyToken) & ~ (nested | valueToken | RBrak)
|
|
//
|
|
|
|
// After the LBrace we must have either a value or an RBrace.
|
|
|
|
scanObjStartAnyToken = ScanTo(Advance(objStart, 1), anyToken)
|
|
|
|
errAfterLBrace = scanObjStartAnyToken & ~ (nested | valueToken | RBrace)
|
|
```
|
|
```
|
|
|
|
|
|
# CFG Kernel (_note: this doc isn't ready_)
|
|
# CFG Kernel (_note: this doc isn't ready_)
|
... | | ... | |