... | @@ -81,3 +81,37 @@ after any value or Comma. |
... | @@ -81,3 +81,37 @@ after any value or Comma. |
|
// 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)
|
|
errAfterLBrak = ScanTo(Advance(arrayStart, 1), anyToken) & ~ (nested | valueToken | RBrak)
|
|
```
|
|
```
|
|
|
|
|
|
|
|
# CFG Kernel (_note: this doc isn't ready_)
|
|
|
|
|
|
|
|
The CFG kernel is a Parabix kernel (to be implemented) that can compute a context-free grammars given a set of rules with its own syntax (close to EBNF), a BixNum representing the nesting depth of its tokens (see NestingDepth kernel), and a StreamSet representing all valid markers.
|
|
|
|
|
|
|
|
```C++
|
|
|
|
enum Token {
|
|
|
|
lCurly,
|
|
|
|
rCurly,
|
|
|
|
lBracket,
|
|
|
|
rBracket,
|
|
|
|
colon,
|
|
|
|
str,
|
|
|
|
value
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO: This is just an initial idea and it wouldn't work. Need to improve that.
|
|
|
|
CFGRule * valueRule = CGF::match(Token::value)
|
|
|
|
CFGRule * arrRule = CFG::matchBracket(
|
|
|
|
Token::lBracket,
|
|
|
|
{ Token::value },
|
|
|
|
Token::rBracket
|
|
|
|
);
|
|
|
|
CFGRule * objRule = CFG::matchBracket(
|
|
|
|
Token::lCurly,
|
|
|
|
{ Token::str, Token::colon, Token::value },
|
|
|
|
Token::rCurly
|
|
|
|
);
|
|
|
|
|
|
|
|
Nesting Depth 00011122211222233443332221111000
|
|
|
|
ND BixNum[2] .................11.............
|
|
|
|
ND BixNum[1] ......111..111111..111111.......
|
|
|
|
ND BixNum[0] ...111...11....11..111...1111...
|
|
|
|
``` |
|
|
|
\ No newline at end of file |