class Tlf\Lexer\JsonGrammar
This is an incomplete grammar, mainly used for testing & building v0.5 of the lexer. It gets "quoted values" and nested arrays.
Constants
Properties
-
`protected $directives = [
'file'=>[ it automatically starts and immediately rewinds one so each of its 'then's can see the first character 'onStart'=>[ 'rewind'=>1, 'then'=>[ ':object', ':array', ':whitespace', ], ], ], @todo I need to apply php_close to almost everything... 'object' => [ 'start''{', 'onStart'=>[ 'buffer.clear'=>true, 'ast.new'=>[ '_setto''root', 'type''object', ], ], 'stop''}', 'onStop'=> [ 'pop_head'=>true, 'pop_directive'=>true, 'buffer.clear'=>true, ], 'then'=>[ ':key'=>[], ':whitespace'=>[], ] ], 'array' => [ 'start''[', 'onStart'=>[ 'buffer.clear'=>true, ast.head =>[ // to say new & set as head? 'ast.new'=>[ '_setto'=> 'root', automatically sets as head? 'type'"array", ], 'then'=>[ ':array.stop', // it would add a duplicate? ':array'=>[ 'onStart'=>[ 'buffer.clear'=>true, ast.head =>[ // to say new & set as head? 'ast.new'=>[ '_addto''value', automatically sets as head? 'type'"array", ], ], 'onStop'=>[ 'pop_head'=>true, 'buffer.clear'=>true, 'pop_directive'=>false, 'then'=>[ ':whitespace', ':comma', ':array.stop'=>[ 'onStart'=>[ 'pop_directive'=>true, 'pop_head'=>false, 'rewind'=>1, 'badbubble'=>true, ] ], ] ], ], ':whitespace', ':value'=>[ 'onStop'=>[ 'rewind'=>1, 'this:appendValueToAst', 'forward'=>1, 'buffer.clear'=>true, 'pop_directive'=>true, 'then'=>[ ':whitespace', ':comma'=>[ 'onStart'=>[ 'then'=>[ '' ], ] ], ':array.stop'=>[ 'onStart'=>[ 'pop_head'=>false, 'pop_directive'=>true, 'rewind'=>1, 'bubble'=>true, ] ], ], ], ], ':array.stop'=>[ 'onStart'=>[ 'pop_head'=>false, 'pop_directive'=>true, 'rewind'=>1, 'bubble'=>true, ] ], ], ], 'stop'']', 'onStop'=>[ 'pop_head'=>true, 'pop_directive'=>true, 'buffer.clear'=>true, ], ], 'key'=>[ I think it takes other chars too... need to look up 'start' => '/(\'|\")/', 'start' => "'", '"'], 'onStart'=>[ 'buffer.clear', ], 'match''/^$1([a-zA-Z0-9_\-]+)/', 'stop''/$1$/', 'onStop'=>[ 'call'=> 'keyFound', this could set the whole match stored to previous So, like... whatever onStop would have had access to gets stored as previous('key')??? 'previous''key', 'pop_directive'=>true, ], 'then'=>[ ':whitespace', ':colon'=>[ ], ] ], 'value'=>[ 'is'=>[ ':bool_value', ':numeric_value', ':str_value', ], ], 'bool_value'=>[ ], 'numeric_value'=>[ ], 'str_value'=>[ 'start' => [ "'", '"', ], 'onStart'=>[ 'buffer.clear', ], 'match'=>'/((?<!\\\\)[^$1])+/', fill with the 1st match 'match''/((?<!\\\\)[^' ,1, '])+/']], fill with the 1st match 'stop''/[^\\\\]''$/']], 'onStop'=>[ this will have to either save it to the object with the previous key or append it to an array I suppose previous(key) will be null if we're inside an array 'call'=> 'store_value', 'buffer.clear'=>true, 'pop_directive'=>true, because its only after the stop 'then'=>[ ':comma'=>[ ], ':whitespace', ] ], ], 'comma'=>[ 'start'',', 'onStart'=>[ 'buffer.clear'=>true, 'stop'=>true, pop this directive stack? 'pop_directive'=>true, ], ], 'colon'=>[ 'match'=> ':', 'then'=> [ ':whitespace'=> [ ], ':value'=>[ 'then'=>[ ':comma'=>[ 'then'=>[ ':key', ':object.stop'=>[ 'bubble'=>true, ], ] ], ], ], ], ], 'whitespace'=>[ serves as start. Since there's no 'stop', not matching will trigger onStop is i dotall? 'match''/^\s+$/i', 'onStop'=>[ 'buffer.clear'=>true, ], ],
];`
Methods
-
public function getNamespace()
-
public function getAstClass()
-
public function onLexerStart($lexer,$file,$token)
-
public function appendValueToAst($lexer, $ast, $token)