@@ -13,6 +13,43 @@ namespace CLDEParser {
1313 //
1414 }
1515
16+ bool JsonDerivative::isObjectFirstFollow (SPtrTokenVectorIterator &iterator) {
17+
18+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::BracketOpen) {
19+ return true ;
20+ }
21+
22+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::CurlyBraceOpen) {
23+ return true ;
24+ }
25+
26+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::String) {
27+ return true ;
28+ }
29+
30+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::BooleanFalse) {
31+ return true ;
32+ }
33+
34+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::BooleanTrue) {
35+ return true ;
36+ }
37+
38+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::Null) {
39+ return true ;
40+ }
41+
42+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::Number) {
43+ return true ;
44+ }
45+
46+ if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::NumberInteger) {
47+ return true ;
48+ }
49+
50+ return false ;
51+ }
52+
1653 void JsonDerivative::matchBracketOpen (SPtrTokenVectorIterator &iterator) {
1754
1855 if ((JsonSyntaxNodeType) (*iterator)->id () != JsonSyntaxNodeType::BracketOpen) {
@@ -270,10 +307,13 @@ namespace CLDEParser {
270307
271308 void JsonDerivative::array (SPtrTokenVectorIterator &iterator) {
272309
273- _sptrSyntaxModel->_sptrSyntaxNodeQueue
274- .push_back (JsonFactory::CreateSPtrJsonSyntaxNode ((int ) JsonSyntaxNodeType::Id,
275- std::string{}));
276- value (iterator);
310+ if (isObjectFirstFollow (iterator)) {
311+
312+ _sptrSyntaxModel->_sptrSyntaxNodeQueue
313+ .push_back (JsonFactory::CreateSPtrJsonSyntaxNode ((int ) JsonSyntaxNodeType::Id,
314+ std::string{}));
315+ value (iterator);
316+ }
277317
278318 if ((JsonSyntaxNodeType) (*iterator)->id () == JsonSyntaxNodeType::Comma) {
279319 value_add (iterator);
@@ -340,7 +380,6 @@ namespace CLDEParser {
340380 SPtrSyntaxModel JsonDerivative::SyntaxModel () {
341381 return _sptrSyntaxModel;
342382 }
343-
344383 void JsonDerivative::Reset () {
345384 _sptrSyntaxModel->Reset ();
346385 }
0 commit comments