Beispiel #1
0
        PropertyAST parseStaticProperty(CodePostion parentPostion)
        {
            PropertyAST ast = new PropertyAST();

            if (CurrentKind != TokenKind.Ident)
            {
                error("不是正确的名称");
            }
            else
            {
                ast.TypeToken = CurrentToken;
            }
            MoveNext();
            match(TokenKind.Colon);
            if (CurrentKind != TokenKind.Ident)
            {
                error("不是正确的变量名称");
            }
            else
            {
                ast.NameToken = CurrentToken;
            }
            MoveNext();
            if (CurrentKind == TokenKind.Assign)
            {
                MoveNext();
                Exp exp = parseExp();
                ast.ValueExp = exp;
            }
            matchSemiOrNewLine();//match(TokenKind.Semi);
            return(ast);
        }
Beispiel #2
0
        List <Token> parseAgreementBlock(CodePostion parentPostion)
        {
            List <Token> list = new List <Token>();

            while (CurrentToken.Kind != TokenKind.EOF && CurrentToken.Col > parentPostion.Col)
            {
                Token temp = parseEnumItem();
                if (temp != null)
                {
                    list.Add(temp);
                }
            }
            return(list);
        }
Beispiel #3
0
        BlockStmt parseBlock(CodePostion parentPostion, int deep)
        {
            //report("parseBlock()");
            BlockStmt   blockStmt = new BlockStmt();
            List <Stmt> arr       = new List <Stmt>();

            while (CurrentToken.Kind != TokenKind.EOF && CurrentToken.Col > parentPostion.Col)
            {
                Stmt temp = parseStmt(deep + 1);
                if (temp != null)
                {
                    blockStmt.Add(temp);
                }
            }
            return(blockStmt);
        }
Beispiel #4
0
        Stmt parseIf(int deep)
        {
            IfStmt ifStmt = new IfStmt();

            IfStmt.IfTrueStmt ifPart = parseTruePart(deep);
            ifStmt.Parts.Add(ifPart);
            while (CurrentToken.Kind == TokenKind.ELSEIF)
            {
                IfStmt.IfTrueStmt elseifPart = parseTruePart(deep);
                ifStmt.Parts.Add(elseifPart);
            }
            if (CurrentToken.Kind == TokenKind.ELSE)
            {
                CodePostion pos = CurrentToken.Postion;
                MoveNext();
                ifStmt.ElsePart = parseBlock(pos, deep);
            }
            return(ifStmt);
        }
Beispiel #5
0
 public TKTContentModel(string content, CodePostion postion)
 {
     this.Content = content;
     this.Postion = postion;
 }
        public void errorf(CodePostion postion, string msgFormat, params string[] msgParams)
        {
            string msg = string.Format(msgFormat, msgParams);

            error(postion, msg);
        }
Beispiel #7
0
 protected void error(CodePostion postion, string msg)
 {
     Messager.Error(postion.Line, postion.Col, /*this.GetType().Name + ":" + */ msg);
     TrueAnalyed = false;
 }