Ejemplo n.º 1
0
        Exp parseTerm()
        {
            //report("parseTerm");
            Exp leftExp = null;

            if (TokenKindHelper.IsLiteral(tape.CurrentKind))// CurrentToken.IsLiteral())
            {
                leftExp = parseLiteral();
            }
            else if (tape.CurrentKind == TokenKind.Each)
            {
                ExpEachWord varExp = new ExpEachWord();
                varExp.EachToken = tape.Current;
                tape.MoveNext();
                return(varExp);
            }
            else if (tape.Current.IsTypeName())
            {
                leftExp = parseTypeExp();
                return(leftExp);
            }
            else if (tape.Current.IsProcPart())
            {
                leftExp = parseProcNamePart();
                return(leftExp);
            }
            else if (tape.Current.IsVarName())
            {
                leftExp = parseVarExp();
                return(leftExp);
            }
            else if (tape.Current.Kind == TokenKind.Ident)
            {
                leftExp = parseVarExp();
                return(leftExp);
            }
            else if (tape.Current.Kind == TokenKind.LBS)
            {
                leftExp = parseBracket();
                return(leftExp);
            }
            else if (tape.Current.Kind == TokenKind.RBS)
            {
                tape.error("多余的右括号");
                tape.MoveNext();
                return(null);
            }
            else if (tape.Current.WKind == WordKind.Unkown)
            {
                var currentText = tape.Current.GetText();
                tape.error("无法识别'" + currentText + "'");
                tape.MoveNext();
                return(null);
            }
            return(leftExp);
        }
Ejemplo n.º 2
0
        private SectionUse ParseUse()
        {
            SectionUse ast = new SectionUse();

            ast.KeyToken = tape.Current;
            tape.MoveNext();
            tape.Match(TokenKind.Colon);

            while (tape.CurrentKind != TokenKind.NewLine && tape.CurrentKind != TokenKind.EOF)
            {
                if (tape.CurrentKind == TokenKind.Ident)
                {
                    ast.AddTypeToken(tape.Current);
                    tape.MoveNext();
                }
                else if (tape.CurrentKind == TokenKind.Comma)
                {
                    tape.MoveNext();
                }
                else
                {
                    tape.error(string.Format("使用的'{0}'不是正确的类型名称", tape.Current.GetText()));
                    tape.MoveNext();
                }
            }
            SkipNewLine();
            return(ast);
        }