示例#1
0
        ExpBracket parseBracket()
        {
            //report("parseBracket");
            ExpBracket bracket = new ExpBracket();

            bracket.LeftBracketToken = tape.Current;
            tape.MoveNext();
            if (!tape.isBracketEnd(tape.Current.Kind))
            {
                while (true)
                {
                    Exp expr = parseBinaryLogicExp();
                    if (expr != null)
                    {
                        bracket.InneExps.Add(expr);
                    }

                    if (tape.isBracketEnd(tape.CurrentKind))
                    {
                        break;
                    }
                    if (tape.CurrentKind != TokenKind.Comma)
                    {
                        tape.error("多余的表达式元素");
                        tape.MoveNext();
                        while (!(tape.isBracketEnd(tape.CurrentKind)) && tape.CurrentKind != TokenKind.Comma)
                        {
                            tape.MoveNext();
                        }
                    }
                    if (tape.CurrentKind == TokenKind.Comma)
                    {
                        tape.MoveNext();
                    }
                }
            }
            if (tape.CurrentKind == TokenKind.RBS)
            {
                bracket.RightBracketToken = tape.Current;
                tape.MoveNext();
            }
            else
            {
                tape.error("括号不匹配");
            }
            return(bracket);
        }