Ejemplo n.º 1
0
        // Compile a code unit, such as an include file.
        void CompileUnit(string filename, string [] lines)
        {
            _ls = new Lexer(lines, _opts, _messages);
            _messages.Filename = filename;

            // Mark this file.
            _ptree.Add(MarkFilename());

            // Loop and parse one single line at a time.
            SimpleToken token = _ls.GetKeyword();
            while (token.ID != TokenID.ENDOFFILE) {
                if (token.ID != TokenID.EOL) {
                    ParseNode labelNode = CheckLabel();
                    if (labelNode != null) {
                        _ptree.Add(labelNode);
                    }
                    ParseNode node = Statement(token);
                    if (node != null) {
                        _ptree.Add(MarkLine());
                        _ptree.Add(node);
                    }
                    ExpectEndOfLine();
                }
                token = _ls.GetKeyword();
            }
        }
Ejemplo n.º 2
0
        public void ValidateTabDelimiter()
        {
            string [] code = new [] {
                "100\tINTEGER A",
                "\tREAL B"
            };
            FortranOptions opts = new FortranOptions();
            MessageCollection messages = new MessageCollection(opts);
            Lexer ls = new Lexer(code, opts, messages);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);
            Assert.IsTrue(ls.HasLabel);
            Assert.IsTrue(ls.Label == "100");

            SimpleToken token = ls.GetToken();
            Assert.IsTrue(token.ID == TokenID.IDENT);

            IdentifierToken identToken = (IdentifierToken)token;
            Assert.AreEqual(identToken.Name, "A");

            Assert.IsTrue(ls.GetToken().ID == TokenID.EOL);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KREAL);

            token = ls.GetToken();
            Assert.IsTrue(token.ID == TokenID.IDENT);

            identToken = (IdentifierToken)token;
            Assert.AreEqual(identToken.Name, "B");
        }
Ejemplo n.º 3
0
        public void ValidateStringParsing()
        {
            string [] code = new [] {
                "      PRINT \"AbCDEf\""
            };
            FortranOptions opts = new FortranOptions();
            MessageCollection messages = new MessageCollection(opts);
            Lexer ls = new Lexer(code, opts, messages);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KPRINT);

            SimpleToken token = ls.GetToken();
            Assert.IsTrue(token.ID == TokenID.STRING);

            StringToken stringToken = (StringToken)token;
            Assert.AreEqual(stringToken.String, "AbCDEf");
        }
Ejemplo n.º 4
0
 public void ValidateHasLabel()
 {
     string [] code = new [] {
         "100   INTEGER A",
         "      STOP"
     };
     FortranOptions opts = new FortranOptions();
     MessageCollection messages = new MessageCollection(opts);
     Lexer ls = new Lexer(code, opts, messages);
     Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);
     Assert.IsTrue(ls.HasLabel);
     Assert.IsTrue(ls.Label == "100");
     Assert.IsTrue(ls.GetToken().ID == TokenID.IDENT);
     Assert.IsTrue(messages.ErrorCount == 0);
 }
Ejemplo n.º 5
0
        public void ValidateF77ExtContinuationCharacter()
        {
            string [] code = new [] {
                "100   INTEGER STA&",
                "      TION"
            };
            FortranOptions opts = new FortranOptions();
            MessageCollection messages = new MessageCollection(opts);
            Lexer ls = new Lexer(code, opts, messages);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);

            SimpleToken token = ls.GetToken();
            Assert.IsTrue(token.ID == TokenID.IDENT);

            IdentifierToken identToken = (IdentifierToken)token;
            Assert.AreEqual(identToken.Name, "STATION");
        }
Ejemplo n.º 6
0
        public void ValidateDebug()
        {
            string [] code = new [] {
                "      INTEGER A",
                "D     REAL B",
                "      INTEGER C"
            };
            FortranOptions opts = new FortranOptions();
            MessageCollection messages = new MessageCollection(opts);
            Lexer ls = new Lexer(code, opts, messages);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);
            Assert.IsTrue(ls.GetToken().ID == TokenID.IDENT);
            Assert.IsTrue(ls.GetToken().ID == TokenID.EOL);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);

            // Now it should pick up 'D' lines.
            opts.GenerateDebug = true;
            ls = new Lexer(code, opts, messages);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KINTEGER);
            Assert.IsTrue(ls.GetToken().ID == TokenID.IDENT);
            Assert.IsTrue(ls.GetToken().ID == TokenID.EOL);
            Assert.IsTrue(ls.GetKeyword().ID == TokenID.KREAL);
        }