public static UntypedNode ParseNewNode2( KNameSpace ns, UntypedNode PrevNode, ArrayList<KToken> TokenList, int BeginIdx, int EndIdx, int ParseOption) { UntypedNode LeftNode = null; KToken.DumpTokenList(0, "ParseNewNode2", TokenList, BeginIdx, EndIdx); while (BeginIdx < EndIdx) { int NextIdx = BeginIdx; KToken KeyToken = TokenList.get(NextIdx); KSyntax Syntax = KeyToken.ResolvedSyntax; // KonohaDebug.P("nextIdx="+NextIdx+",Syntax="+Syntax); if (LeftNode == null) { if (Syntax.IsDelim()) { // A ; B NextIdx++; } else { LeftNode = new UntypedNode(ns, KeyToken); NextIdx = LeftNode.ParseToken(KeyToken, TokenList, NextIdx, EndIdx); } } else { if (Syntax.IsDelim()) { // A ; B ParseNewNode2(ns, LeftNode, TokenList, NextIdx, EndIdx, AllowEmpty); break; } else if (Syntax.IsBinaryOperator()) { // A + B UntypedNode RightNode = ParseNewNode2(ns, null, TokenList, NextIdx + 1, EndIdx, 0); LeftNode = BinaryNode(ns, LeftNode, KeyToken, RightNode); break; } else if (Syntax.IsSuffixOperator()) { // A [] NextIdx = LeftNode.ParseToken(KeyToken, TokenList, NextIdx, EndIdx); } else { } } if (!(BeginIdx < NextIdx)) { KonohaDebug.P("Panic ** " + Syntax + " BeginIdx=" + BeginIdx + ", NextIdx=" + NextIdx); break; } BeginIdx = NextIdx; } if (LeftNode == null) {} if (PrevNode != null && LeftNode != null) { PrevNode.LinkNode(LeftNode); } return LeftNode; }