aknlayoutcompiler/src/CoreParser.cpp
changeset 1 b700e12870ca
parent 0 f58d6ec98e88
equal deleted inserted replaced
0:f58d6ec98e88 1:b700e12870ca
   173 		{
   173 		{
   174 		for (int i=stack.size()-1; i>=1; i--)
   174 		for (int i=stack.size()-1; i>=1; i--)
   175 			{
   175 			{
   176 			Step& step = stack[i];
   176 			Step& step = stack[i];
   177 			Step& parent = stack[step.iParent];
   177 			Step& parent = stack[step.iParent];
   178 			parent.iResult.iChildren.push_front(step.iResult);
   178 			parent.iResult.iChildren.insert(0,step.iResult);//push_front
   179 			if (parent.iResult.iEnd < step.iResult.iEnd)
   179 			if (parent.iResult.iEnd < step.iResult.iEnd)
   180 				parent.iResult.iEnd = step.iResult.iEnd;
   180 				parent.iResult.iEnd = step.iResult.iEnd;
   181 			}
   181 			}
   182 
   182 
   183 		return stack[0].iResult;
   183 		return stack[0].iResult;
   194 	switch (iOp)
   194 	switch (iOp)
   195 		{
   195 		{
   196 		case EExact:
   196 		case EExact:
   197 			{
   197 			{
   198 			string match(iMatch);
   198 			string match(iMatch);
   199 			int mLen = match.size();
   199 			unsigned int mLen = match.size();
   200 			if (mLen + aPos > aString.size())
   200 			if (mLen + aPos > aString.size())
   201 				return EFail;
   201 				return EFail;
   202 			else if (aString.substr(aPos, mLen) != match)
   202 			else if (aString.substr(aPos, mLen) != match)
   203 				return EFail;
   203 				return EFail;
   204 			else
   204 			else
   206 			return EPass;
   206 			return EPass;
   207 			}
   207 			}
   208 
   208 
   209 		case EEos:
   209 		case EEos:
   210 			{
   210 			{
   211 			if (aPos != aString.size())
   211 			if (static_cast<unsigned int>( aPos ) != aString.size())
   212 				return EFail;
   212 				return EFail;
   213 			else
   213 			else
   214 				step.iResult.iEnd = aPos;
   214 				step.iResult.iEnd = aPos;
   215 			return EPass;
   215 			return EPass;
   216 			}
   216 			}
   317 	{
   317 	{
   318 	cout << res.iRuleId << " " << res.iStart << "..." << res.iEnd << " ";
   318 	cout << res.iRuleId << " " << res.iStart << "..." << res.iEnd << " ";
   319 	if (res.iChildren.size())
   319 	if (res.iChildren.size())
   320 		{
   320 		{
   321 		cout << "{ ";
   321 		cout << "{ ";
   322 		for (int i=0; i<res.iChildren.size(); i++)
   322 		for (unsigned int i=0; i<res.iChildren.size(); i++)
   323 			DoPrint(res.iChildren[i]);
   323 			DoPrint(res.iChildren[i]);
   324 		cout << "} ";
   324 		cout << "} ";
   325 		}
   325 		}
   326 	}
   326 	}
   327 
   327