Exemplo n.º 1
0
        private PackageNameAST ParsePackageName(TokenTape tape)
        {
            PackageNameAST pname = new PackageNameAST();

            //TokenKind currentKind = tape.Current.Kind;
            while (IsPackageNamePart(tape.CurrentKind))
            {
                //currentKind = tape.Current.Kind;
                if (tape.CurrentKind == TokenKind.Ident)
                {
                    pname.Add(tape.Current);
                    tape.MoveNext();
                }
                else if (tape.CurrentKind == TokenKind.DIV)
                {
                    tape.MoveNext();
                }
                //else if (tape.CurrentKind == TokenKind.Semi)
                //{
                //    break;
                //}
                //else if (tape.CurrentKind == TokenKind.NewLine)
                //{
                //    break;
                //}
                //else
                //{
                //    tape.error(string.Format("'{0}'不是正确的开发包名称", tape.Current.GetText()));
                //    tape.MoveNext();
                //}
            }
            return(pname);
        }
Exemplo n.º 2
0
 private SectionDim.DimVarAST ParseDimVar(TokenTape tape)
 {
     SectionDim.DimVarAST dimv = new SectionDim.DimVarAST();
     dimv.NameToken = tape.Current;
     tape.MoveNext();
     tape.Match(TokenKind.Assign);
     dimv.TypeToken = tape.Current;
     tape.MoveNext();
     return(dimv);
 }
Exemplo n.º 3
0
        private SectionImport ParseImport()
        {
            SectionImport ast = new SectionImport();

            ast.KeyToken = tape.Current;
            tape.MoveNext();
            tape.Match(TokenKind.Colon);
            ast.Packages = ParsePackageList();
            return(ast);
        }
Exemplo n.º 4
0
        private Exp ParseAssign()
        {
            Exp leftExp = parseBinaryLogicExp();

            if (tape.Current.Kind == TokenKind.Assign || tape.Current.Kind == TokenKind.AssignTo)
            {
                ExpAssign assignExp = new ExpAssign();
                assignExp.IsAssignTo = (tape.Current.Kind == TokenKind.AssignTo);
                tape.MoveNext();
                Exp rightExp = parseBinaryLogicExp();

                if (!assignExp.IsAssignTo)
                {
                    assignExp.ToExp    = leftExp;
                    assignExp.ValueExp = rightExp;
                }
                else
                {
                    assignExp.ToExp    = rightExp;
                    assignExp.ValueExp = leftExp;
                }
                return(assignExp);
            }
            else
            {
                return(leftExp);
            }
        }