Esempio n. 1
0
        public static List<Error> Translate(Source source)
        {
            var err = new List<Error>();
            var prg = new Program();
            try
            {
                var input = new ANTLRStringStream(source.GetSourceData());
                var lexer = new PascalLexer(input);
                var tokens = new CommonTokenStream(lexer);
                var parser = new PascalParser(tokens);
                prg = parser.program();
                prg.SetSourceIdentifier(source.GetSourceIdentifier());
            }
            catch (RecognitionException e)
            {
                err.Add(new Error(FormatRecognitionException(e, source.GetSourceIdentifier())));
            }
            if (err.Count != 0)
                return err;

            var val = new Validator();
            err = val.Validate(prg);
            Root = prg;
            return err;
        }
Esempio n. 2
0
 public void ParseCondition()
 {
     lexer.CharStream = new ANTLRStringStream("(9*(1-a))-4*(a.bc+3*4) <= 0");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.condition();
     Assert.AreEqual(res.Eq, EqType.Le);
 }
Esempio n. 3
0
 public void ParseExpression()
 {
     lexer.CharStream = new ANTLRStringStream("(9*(1-a))-4*(a.bc+3*4)");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.expression();
     Assert.AreEqual(res.List[8].Text, ")");
 }
Esempio n. 4
0
 public void ParseFactor()
 {
     lexer.CharStream = new ANTLRStringStream("34557");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.factor();
     Assert.AreEqual(res.List.First().Text, "34557");
 }
Esempio n. 5
0
 public void ParseForStatement()
 {
     lexer.CharStream = new ANTLRStringStream("for a=1 to N do begin end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.forStatement();
     Assert.True(res.Fs.To);
 }
Esempio n. 6
0
        public void Parse(string file_path)
        {
            Source source  = new Source(file_path);
            var    scanner = new PascalScanner(source);
            var    parser  = new PascalParser(scanner);

            parser.Parse();
        }
Esempio n. 7
0
 public void ParseAssignStatement()
 {
     lexer.CharStream = new ANTLRStringStream("s := name(a.b.c, a);");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.assignStatement();
     Assert.AreEqual(res.Invoke.Name.Text, "name");
 }
Esempio n. 8
0
 public void ParseDottedIdentifier()
 {
     lexer.CharStream = new ANTLRStringStream("ID1.ID2");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var actual = new[] { "ID1", "ID2" };
     var res = parser.dottedIdentifier();
     CollectionAssert.AreEqual(res.Select(x => x.Text), actual);
 }
Esempio n. 9
0
 static void Main(string[] args)
 {
     //Path to file should be in args
     if (args.Length != 0)
     {
         var parser = new PascalParser(args[0]);
         parser.Parse();
     }
 }
Esempio n. 10
0
        public override TypeLibrary Load(IPlatform platform, TypeLibrary dstLib)
        {
            var rdr          = new StreamReader(new MemoryStream(bytes));
            var lexer        = new PascalLexer(rdr, false); // It seems MPW pascal doesn't allow nesting comments.
            var parser       = new PascalParser(lexer);
            var symbolTable  = new SymbolTable(platform);
            var declarations = parser.Parse();
            var tldser       = new TypeLibraryDeserializer(platform, true, dstLib);
            var constants    = EvaluateConstants(declarations);
            var typeImporter = new TypeImporter(platform, tldser, constants, dstLib);

            typeImporter.LoadTypes(declarations);
            LoadServices(declarations, typeImporter, constants, platform, dstLib);
            return(dstLib);
        }
Esempio n. 11
0
        static string TranslatePascalToCSharp(string pascal)
        {
            ICharStream  input        = new AntlrInputStream(pascal);
            PascalLexer  pascalLexer  = new PascalLexer(input);
            ITokenStream tokenStream  = new CommonTokenStream(pascalLexer);
            PascalParser pascalParser = new PascalParser(tokenStream)
            {
                ErrorHandler = new BailErrorStrategy()
            };

            var listener = new PascalParser.PascalListener();

            pascalParser.AddParseListener(listener);
            pascalParser.program();

            return(listener.Code);
        }
Esempio n. 12
0
 public void ParseType()
 {
     lexer.CharStream = new ANTLRStringStream("integer");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.type();
     Assert.AreEqual(res.ToString(), "integer");
 }
Esempio n. 13
0
 public void ParseIdentifierListParam()
 {
     lexer.CharStream = new ANTLRStringStream("a.b.c, d.ef.dsf");
     tokens.TokenSource = lexer;
     var actual = new []{"d", "ef", "dsf"};
     parser = new PascalParser(tokens);
     var res = parser.identifierListParam();
     CollectionAssert.AreEqual(res[1].Select(x=>x.Text), actual);
 }
Esempio n. 14
0
 public void ParseIdentifier()
 {
     lexer.CharStream = new ANTLRStringStream("ID1");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     const string actual = "ID1";
     var res = parser.identifier();
     Assert.AreEqual(res.Text, actual);
 }
Esempio n. 15
0
 public void ParseFuncDef()
 {
     lexer.CharStream = new ANTLRStringStream("function A(a:integer; b,c:Z):F;var h:integer; begin end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.funcDef();
     Assert.AreEqual(res.ReturnType.ToString(), "F");
 }
Esempio n. 16
0
 public void ParseIfStatement()
 {
     lexer.CharStream = new ANTLRStringStream("if( a.d.c>d.as.s) then begin end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.ifStatement();
     Assert.AreEqual(res.Cond.Eq, EqType.Gt);
 }
Esempio n. 17
0
 public void ParseParameterList()
 {
     lexer.CharStream = new ANTLRStringStream("a:integer; b,c:F;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.parameterList();
     Assert.AreEqual(res[1].Name.Text, "b");
 }
Esempio n. 18
0
 public void ParseProcDef()
 {
     lexer.CharStream = new ANTLRStringStream("procedure A(a:integer; b,c:Z);begin end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.procDef();
     Assert.AreEqual(res.Name.Text, "A");
 }
Esempio n. 19
0
        public void ParseProgram()
        {
            // в качестве аргумента в функцию могу передавать только dottedNames

            const string input =
            @"
            program Hello;

            type a = record
              a : integer;
              b : B;
            end;

            type B = record
              a : integer;
            end;

            procedure print(a:integer);
            begin
            writeln(a);
            end;

            function sum(a:integer; b:integer):integer;
            var
             c : integer;
            begin
            c := a + b;
            sum := c;
            end;

            var
             c:a;
              d:integer;
            begin

              c.b.a := 5;
              d:=5;
              c.a := sum(c.b.a, d);
              for c=1 to c.a do
              begin
            print(c);
              end;

            end.
            ";

            lexer.CharStream = new ANTLRStringStream(input);
            tokens.TokenSource = lexer;
            parser = new PascalParser(tokens);
            var res = parser.program();
            Assert.AreEqual(res.GetChildren().Count, 7);
        }
Esempio n. 20
0
 public void ParseSimpleFunc()
 {
     lexer.CharStream = new ANTLRStringStream("name(a.b.c, a);");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.simpleFunc();
     Assert.AreEqual(res.Name.Text, "name");
 }
Esempio n. 21
0
 public void RecordDef()
 {
     lexer.CharStream = new ANTLRStringStream("type A = record a : integer; b,c : L end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.recordDef();
     Assert.AreEqual(res.GetChildren().Count, 3);
 }
Esempio n. 22
0
        private void Given_Parser(string src)
        {
            var lexer = new PascalLexer(new StringReader(src));

            this.parser = new PascalParser(lexer);
        }
Esempio n. 23
0
 public void ParseTerm()
 {
     lexer.CharStream = new ANTLRStringStream("+34557*5");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.term();
     Assert.AreEqual(res.List[3].Text, "5");
 }
Esempio n. 24
0
 public void ParseStdProc()
 {
     lexer.CharStream = new ANTLRStringStream("writeln(a.b.c, a);");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.stdProc();
     Assert.AreEqual(res.Args[0].Select(x => x.Text).First(), "a");
 }
Esempio n. 25
0
 public void ParseWhileStatement()
 {
     lexer.CharStream = new ANTLRStringStream("while ( a.d.c>1) do begin end;");
     tokens.TokenSource = lexer;
     parser = new PascalParser(tokens);
     var res = parser.whileStatement();
     Assert.AreEqual(res.Cond.Eq, EqType.Gt);
 }
Esempio n. 26
0
 public static bool IsPascal(string text)
 => PascalParser.IsMatching(text);