@@ -83,7 +83,7 @@ private function R()
83
83
84
84
private function I ()
85
85
{
86
- if ($ this ->position < count ( $ this -> tokens ) && $ this ->lookahead ()->token != Token::CLOSE_OBJECT ) {
86
+ if ($ this ->lookahead ()-> token != Token:: EOF && $ this ->lookahead ()->token != Token::CLOSE_OBJECT ) {
87
87
return $ this ->P ();
88
88
}
89
89
return [];
@@ -129,6 +129,7 @@ class Token
129
129
const ARRAYS = 'array ' ;
130
130
const OPEN_OBJECT = 'open_object ' ;
131
131
const CLOSE_OBJECT = 'close_object ' ;
132
+ const EOF = 'eof ' ;
132
133
}
133
134
134
135
class Tokenizer
@@ -149,7 +150,7 @@ public function lex($string)
149
150
foreach (self ::$ tokenMap as $ regex => $ token ) {
150
151
if (preg_match ($ regex , $ string , $ matches , null , $ offset )) {
151
152
$ tokenDetails = new stdClass ();
152
- $ tokenDetails ->token = trim ( $ token) ;
153
+ $ tokenDetails ->token = $ token ;
153
154
$ tokenDetails ->value = trim ($ matches [0 ]);
154
155
$ tokens [] = $ tokenDetails ;
155
156
$ offset += strlen ($ matches [0 ]);
@@ -158,6 +159,10 @@ public function lex($string)
158
159
}
159
160
throw new Exception (sprintf ('Unexpected character: >%s< offset >%d< ' , $ string [$ offset ], $ offset ));
160
161
}
162
+ $ eofToken = new stdClass ();
163
+ $ eofToken ->token = Token::EOF ;
164
+ $ eofToken ->value = 'eof ' ;
165
+ $ tokens [] = $ eofToken ;
161
166
return $ tokens ;
162
167
}
163
168
}
0 commit comments