コード例 #1
0
 public void CopesWithPropertyAccess()
 {
     using var f = TestUtilities.LoadTestResource("Fifth.Test.TestSampleCode.property-access.5th");
     if (FifthParserManager.TryParseFile <FifthProgram>(f.Path, out var ast, out var errors))
     {
         var sb  = new StringBuilder();
         var sut = new CodeGenVisitor(new StringWriter(sb));
         sut.VisitFifthProgram(ast);
         var generatedCode = sb.ToString();
         generatedCode.Should().NotBeNullOrWhiteSpace();
         Console.WriteLine(generatedCode);
     }
 }
コード例 #2
0
 public void TestCanBuildBinaryExpression(string fragment, Type leftOperandType, Type rightOperandType, Operator op)
 {
     if (FifthParserManager.TryParse <Expression>(fragment, out var ast, out var errors))
     {
         errors.Should().NotBeNull().And.BeEmpty();
         ast.Should().NotBeNull();
         _ = ast.Should().BeOfType(typeof(BinaryExpression));
         var binexp = ast as BinaryExpression;
         _ = binexp.Should().NotBeNull();
         _ = binexp.Left.Should().NotBeNull().And.BeOfType(leftOperandType);
         _ = binexp.Right.Should().NotBeNull().And.BeOfType(rightOperandType);
         _ = binexp.Op.Should().Be(op);
     }
コード例 #3
0
        public void TestCanGatherMultipleDefinitions()
        {
            var TestProgram = @"main():void {myprint(""hello world"");}
            myprint(x: string):void { print(x);}
            blah():void{ result: int = 5; return result;}";

            if (!FifthParserManager.TryParse <FifthProgram>(TestProgram, out var ast, out var errors))
            {
                Assert.Fail();
            }
            var globalScope = ast.NearestScope();

            var visitor = new SymbolTableBuilderVisitor();

            ast.Accept(visitor);
            var symtab = globalScope.SymbolTable;

            Assert.That(symtab.Count, Is.EqualTo(5)); // the three above plus two builtins
            foreach (var v in symtab.Values.ToArray()[0..2])