Example #1
0
        public Exp Parse(ExpRaw rawExp, ContextExp expContext)
        {
            ExpContext = expContext;
            List <LexToken> tokens = Seg(rawExp.RawTokens);
            ExpParser       parser = new ExpParser();

            Exp exp  = parser.Parse(tokens, ExpContext);
            Exp exp2 = exp.Analy();

            return(exp2);
        }
Example #2
0
        private Exp ParseRawExpPropertyValue()
        {
            ExpRaw rexp = new ExpRaw();
            int    line = tape.Current.Line;

            while (tape.CurrentKind != TokenKind.EOF && tape.CurrentKind != TokenKind.NewLine && tape.CurrentKind != TokenKind.Comma)
            {
                rexp.RawTokens.Add(tape.Current);
                tape.MoveNext();
                if (tape.CurrentKind == TokenKind.Semi)
                {
                    break;
                }
            }
            return(rexp);
        }
Example #3
0
        private ExpRaw ParseRawExpLineComma()
        {
            ExpRaw rexp = new ExpRaw();
            //int line = tape.Current.Line;
            int bracketCount = -1;

            while (tape.Current != null)//while (tape.Current.Kind != TokenKindSymbol.EOF && tape.Current.Kind != TokenKindSymbol.NewLine)
            {
                //TokenKindSymbol kind = tape.Current.Kind;
                if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma))
                {
                    break;
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS))
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    if (bracketCount == -1)
                    {
                        bracketCount = 0;
                    }
                    bracketCount++;
                    currLineTokenTape.MoveNext();
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS))
                {
                    if (bracketCount <= 0)
                    {
                        currLineTokenTape.error("多余的右括号");
                    }
                    else
                    {
                        bracketCount--;
                        rexp.RawTokens.Add(currLineTokenTape.Current);
                    }
                    currLineTokenTape.MoveNext();
                }

                else
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    currLineTokenTape.MoveNext();
                }
            }
            return(rexp);
        }
Example #4
0
        private ExpRaw ParseRawExpPropertyValue()
        {
            ExpRaw rexp = new ExpRaw();
            int    line = tape.Current.Line;

            while (tape.HasCurrent)
            {
                if (!tape.Current.IsKind(TokenKindSymbol.Comma, TokenKindSymbol.Semi))
                {
                    rexp.RawTokens.Add(tape.Current);
                    tape.MoveNext();
                }
                else
                {
                    break;
                }
            }
            return(rexp);
        }
Example #5
0
        private StmtRaw ParseStmtCallSingle()
        {
            ExpRaw      startExpr = ParseRawExpLine();
            StmtCallRaw stmtcall  = new StmtCallRaw();

            stmtcall.CallExp = startExpr;
            while (currLineTokenTape.HasCurrent)
            {
                if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma))
                {
                    currLineTokenTape.Match(TokenKindSymbol.Comma);
                    break;
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Semi))
                {
                    currLineTokenTape.Match(TokenKindSymbol.Semi);
                    break;
                }
            }
            return(stmtcall);
        }
Example #6
0
        private PropertyASTRaw ParseProperty()
        {
            PropertyASTRaw property = new PropertyASTRaw();

            //property.FileContext = this.fileMY.FileContext;
            property.NameToken = (LexTokenText)tape.Current;
            tape.MoveNext();
            if (tape.HasCurrent && tape.Current.IsKind(TokenKindSymbol.Assign))
            {
                tape.MoveNext();
                if (tape.HasCurrent)
                {
                    ExpRaw exp = ParseRawExpPropertyValue();
                    if (exp != null)
                    {
                        property.ValueExp = exp;
                    }
                }
            }
            return(property);
        }
Example #7
0
        private ExpRaw ParseIfRawExpLine()
        {
            ExpRaw rexp         = new ExpRaw();
            int    bracketCount = -1;

            while (currLineTokenTape.HasCurrent)
            {
                if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS))
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    if (bracketCount == -1)
                    {
                        bracketCount = 0;
                    }
                    bracketCount++;
                    currLineTokenTape.MoveNext();
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS))
                {
                    if (bracketCount <= 0)
                    {
                        currLineTokenTape.error("多余的右括号");
                    }
                    else
                    {
                        bracketCount--;
                        rexp.RawTokens.Add(currLineTokenTape.Current);
                    }
                    currLineTokenTape.MoveNext();
                }
                else
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    currLineTokenTape.MoveNext();
                }
            }
            return(rexp);
        }
Example #8
0
        private ExpRaw ParseRawExpLine()
        {
            ExpRaw rexp = new ExpRaw();
            //int line = tape.Current.Line;
            int bracketCount = -1;

            while (currLineTokenTape.HasCurrent)
            {
                if (currLineTokenTape.Current.IsKind(TokenKindSymbol.LBS))
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    if (bracketCount == -1)
                    {
                        bracketCount = 0;
                    }
                    bracketCount++;
                    currLineTokenTape.MoveNext();
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.RBS))
                {
                    if (bracketCount <= 0)
                    {
                        currLineTokenTape.error("多余的右括号");
                    }
                    else
                    {
                        bracketCount--;
                        rexp.RawTokens.Add(currLineTokenTape.Current);
                    }
                    currLineTokenTape.MoveNext();
                }
                else if (currLineTokenTape.Current.IsKind(TokenKindSymbol.Comma))
                {
                    if (bracketCount == -1)
                    {
                        //rexp.RawTokens.Add(currLineTokenTape.Current);
                        //currLineTokenTape.MoveNext();
                        break;
                    }
                    else if (bracketCount == 0)
                    {
                        //currLineTokenTape.MoveNext();
                        break;
                    }
                    else if (bracketCount > 0)
                    {
                        rexp.RawTokens.Add(currLineTokenTape.Current);
                        currLineTokenTape.MoveNext();
                    }
                }
                else
                {
                    rexp.RawTokens.Add(currLineTokenTape.Current);
                    currLineTokenTape.MoveNext();
                }
                //if (tape.CurrentKind == TokenKind.Semi)
                //{
                //    break;
                //}
            }
            return(rexp);
        }
Example #9
0
        private Exp ParseRawExpLine()
        {
            ExpRaw rexp         = new ExpRaw();
            int    line         = tape.Current.Line;
            int    bracketCount = -1;

            while (tape.Current.Kind != TokenKind.EOF && tape.Current.Kind != TokenKind.NewLine)
            {
                TokenKind kind = tape.Current.Kind;
                if (kind == TokenKind.LBS)
                {
                    rexp.RawTokens.Add(tape.Current);
                    if (bracketCount == -1)
                    {
                        bracketCount = 0;
                    }
                    bracketCount++;
                    tape.MoveNext();
                }
                else if (kind == TokenKind.RBS)
                {
                    if (bracketCount <= 0)
                    {
                        tape.error("多余的右括号");
                    }
                    else
                    {
                        bracketCount--;
                        rexp.RawTokens.Add(tape.Current);
                    }
                    tape.MoveNext();
                }
                //if (kind == TokenKind.NewLine)
                //{
                //    break;
                //}
                else if (kind == TokenKind.Comma)
                {
                    if (bracketCount == -1)
                    {
                        rexp.RawTokens.Add(tape.Current);
                        tape.MoveNext();
                        break;
                    }
                    else if (bracketCount == 0)
                    {
                        tape.MoveNext();
                        break;
                    }
                    else if (bracketCount > 0)
                    {
                        rexp.RawTokens.Add(tape.Current);
                        tape.MoveNext();
                    }
                }
                else
                {
                    rexp.RawTokens.Add(tape.Current);
                    tape.MoveNext();
                }
                //if (tape.CurrentKind == TokenKind.Semi)
                //{
                //    break;
                //}
            }
            return(rexp);
        }