Esempio n. 1
0
        public void TestForLoop()
        {
            var test = @"
                         for(int i = 0;i < 10; i = i + 1){
                            i = 15;
                            print i;                            
                         }";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 2
0
        public void TestSimpleAst()
        {
            var test = @"x = 1;";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            var expr = (ast.ScopedStatements[0] as Expr);

            Assert.IsTrue(expr.Left.Token.TokenType == TokenType.Word);
            Assert.IsTrue(expr.Right.Token.TokenType == TokenType.Int);
            Assert.IsTrue(ast.Token.TokenType == TokenType.ScopeStart);
        }
Esempio n. 3
0
        public void RunPrecedenceTests_WithBraces(string input, int expectedOutput)
        {
            var tokens = LanguageParser.Parse(input);
            var result = new InterpreterWithPrecedence(tokens)
                         .Run();

            Assert.Equal(expectedOutput, result);
            var pieces = input.Split(Environment.NewLine + Environment.NewLine);
            var record = RulesParser.ParseRules(pieces[0]);
            var count  = record.CountValidMessages("0", pieces[1].Split(Environment.NewLine));

            Assert.Equal(279, count);
        }
Esempio n. 4
0
        private ICustomFormatSpecification InitializeSpecification(Match match)
        {
            var type    = match.Groups["type"].Value.ToLower();
            var value   = match.Groups["value"].Value.ToLower();
            var isRegex = match.Groups["m_r"].Success;

            switch (type)
            {
            case "r":
                return(new ResolutionSpecification {
                    Value = (int)ParseResolution(value)
                });

            case "s":
                return(new SourceSpecification {
                    Value = (int)ParseSource(value)
                });

            case "m":
                return(new QualityModifierSpecification {
                    Value = (int)ParseModifier(value)
                });

            case "e":
                return(new EditionSpecification {
                    Value = ParseString(value, isRegex)
                });

            case "l":
                return(new LanguageSpecification {
                    Value = (int)LanguageParser.ParseLanguages(value).First()
                });

            case "i":
                return(new IndexerFlagSpecification {
                    Value = (int)ParseIndexerFlag(value)
                });

            case "g":
                var minMax = ParseSize(value);
                return(new SizeSpecification {
                    Min = minMax.Item1, Max = minMax.Item2
                });

            case "c":
            default:
                return(new ReleaseTitleSpecification {
                    Value = ParseString(value, isRegex)
                });
            }
        }
Esempio n. 5
0
        public void FunctionTest()
        {
            var test = @"void foo(int x, int y){ 
                            int x = 1; 
                            var z = fun() -> { 
                                zinger = ""your mom!"";
                                someThing(a + b) + 25 - (""test"" + 5);
                            };
                        }

                        z = 3;

                        int testFunction(){
                            var p = 23;

                            if(foo){
                                var x = 1;
                            }
                            else if(faa){
                                var y = 2;
                                var z = 3;
                            }
                            else{
                                while(1 + 1){
                                    var x = fun () ->{
                                        test = 0;
                                    };
                                }

                                if(foo){
                                    var x = 1;
                                }
                                else if(faa){
                                    var y = 2;
                                    var z = 3;
                                }
                                else{
                                    for(int i = 0; i < 10; i = i + 1){
                                        var x = z;
                                    }
                                }
                            }
                        }";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            Assert.IsTrue(ast.ScopedStatements.Count == 3);
            Assert.IsTrue(ast.ScopedStatements[0] is MethodDeclr);
            Assert.IsTrue(ast.ScopedStatements[1] is Expr);
            Assert.IsTrue(ast.ScopedStatements[2] is MethodDeclr);
        }
Esempio n. 6
0
        public void Puzzle1()
        {
            var results = new List <long>();
            var input   = new FileReader()
                          .GetResource("AdventOfCode2020.Tests.Day18.PuzzleInput.txt");

            foreach (var line in input.Split(Environment.NewLine))
            {
                var tokens = LanguageParser.Parse(line);
                results.Add(new Interpreter(tokens).Run());
            }

            Assert.Equal(2743012121210, results.Sum());
        }
Esempio n. 7
0
        public override ExtraFile Import(Series series, EpisodeFile episodeFile, string path, string extension, bool readOnly)
        {
            if (SubtitleFileExtensions.Extensions.Contains(Path.GetExtension(path)))
            {
                var subtitleFile = ImportFile(series, episodeFile, path, extension, readOnly);
                subtitleFile.Language = LanguageParser.ParseSubtitleLanguage(path);

                _subtitleFileService.Upsert(subtitleFile);

                return(subtitleFile);
            }

            return(null);
        }
Esempio n. 8
0
        public void TestInvalidAssignment2()
        {
            var test = @"
                        int x = func();

                        string func(){
                            return ""test"";
                        }
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 9
0
        public void TestBools()
        {
            var test = @"
                        var x = true & false || true;
                        while(x){
                            print x;
                            x = 1 > 2;
                        }
                        print x;";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 10
0
        public void TestWhileLoop()
        {
            var test = @"
                        int x = 5;
                        while(x > 0){
                            print x;
                            x = x - 1;
                        }
                        print ""done!"";";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 11
0
        public void TestInvalidReturnTypes()
        {
            var test = @"
                         int foo(string t){
                                var x = ""test"";
                                return x + t;
                         }

                        print foo(""pong"");";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 12
0
        public void AstWithExpression()
        {
            var test = @"x = 1 + 2;";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            var expr = (ast.ScopedStatements[0] as Expr);

            Assert.IsTrue(expr.Left.Token.TokenType == TokenType.Word);
            Assert.IsTrue((expr.Right as Expr).Left.Token.TokenValue == "1");
            Assert.IsTrue((expr.Right as Expr).Right.Token.TokenValue == "2");
            Assert.IsTrue((expr.Right as Expr).Token.TokenValue == "+");
            Assert.IsTrue((expr.Right as Expr).Token.TokenType == TokenType.Plus);
        }
Esempio n. 13
0
        public void should_parse_language(string postTitle, params Language[] languages)
        {
            var movieInfo     = Parser.Parser.ParseMovieTitle(postTitle, true);
            var languageTitle = postTitle;

            if (movieInfo != null)
            {
                languageTitle = movieInfo.SimpleReleaseTitle;
            }
            var result = LanguageParser.ParseLanguages(languageTitle);

            result = LanguageParser.EnhanceLanguages(languageTitle, result);
            result.Should().BeEquivalentTo(languages);
        }
Esempio n. 14
0
        public void TestExpressionInterpreter()
        {
            var test = @"
                        int x = 100 + 1;
                        void foo(){
                            print (1 + 1);
                        }
                        print (x + 2 + (3 + 4));
                        foo();
                        foo();";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse();

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 15
0
        public void TestForwardReferences3()
        {
            var test = @"
                         print item;
                         string item = func(""test"");

                         var func(string printer){
                            return ""yes"";
                         }                         
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 16
0
        public void TestFunctionInvalidTypeParamters()
        {
            var test = @"
                        var func(string printer, int x){
                            print printer;
                            print x;
                        }
            
                        func(""asdf"", ""asdf"");
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 17
0
        public override ExtraFile Import(Movie movie, MovieFile movieFile, string path, string extension, bool readOnly)
        {
            if (SubtitleFileExtensions.Extensions.Contains(Path.GetExtension(path)))
            {
                var language     = LanguageParser.ParseSubtitleLanguage(path);
                var suffix       = GetSuffix(language, 1, false);
                var subtitleFile = ImportFile(movie, movieFile, path, readOnly, extension, suffix);
                subtitleFile.Language = language;

                _subtitleFileService.Upsert(subtitleFile);

                return(subtitleFile);
            }

            return(null);
        }
Esempio n. 18
0
        public void CreateDictionaryFromString_ExpectedBehavior(string input, string queriesToCheck)
        {
            Dictionary <string, int> dictionary = LanguageParser.CreateDictionaryFromString(input);

            string[] split = queriesToCheck.Split(',');
            foreach (string entry in split)
            {
                string[] entrySplit = entry.Split(':');
                if (entrySplit.Length == 1)
                {
                    return;
                }
                int indentation = int.Parse(entrySplit[1]);
                Assert.AreEqual(dictionary[entrySplit[0]], indentation);
            }
        }
Esempio n. 19
0
        ProgramNode ParseModule(ModulePath?path, SourceText source, SyntaxContext context)
        {
            var msg = path != null ? $" with path '{path}'" : string.Empty;

            if (!_loading.Add(source.FullPath))
            {
                throw new ModuleLoadException($"Module{msg} could not be loaded due to circular 'use' declarations.");
            }

            try
            {
                if (context.Parses.ContainsKey(source.FullPath))
                {
                    throw new ModuleLoadException($"Module{msg} was already loaded previously.");
                }

                var lex   = LanguageLexer.Lex(source);
                var parse = LanguageParser.Parse(lex, SyntaxMode.Normal);

                context.AddParse(source.FullPath, parse);

                foreach (var diag in lex.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                foreach (var diag in parse.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                var analysis = LanguageAnalyzer.Analyze(parse, this, context);

                foreach (var diag in analysis.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                return(analysis.IsSuccess ? (ProgramNode)parse.Tree : throw new ModuleLoadException(
                           $"Module{msg} failed to load due to syntax and/or semantic errors."));
            }
            finally
            {
                _ = _loading.Remove(source.FullPath);
            }
        }
Esempio n. 20
0
        public static LeeSyntaxTree ParseText(SourceText text, ParseOptions options, string path = "")
        {
            if (text == null)
            {
                throw new ArgumentNullException(nameof(text));
            }

            using (var lexer = new Lexer(text, options))
            {
                using (var parser = new LanguageParser(lexer))
                {
                    var compilationUnit = (CompilationUnitSyntax)parser.ParseCompilationUnit();
                    var tree            = new ParsedSyntaxTree(text, path, options, compilationUnit, parser.Directives);
                    return(tree);
                }
            }
        }
Esempio n. 21
0
        public void AstWithExpression2()
        {
            var test = @"int z = 1;
                        {
                            int y = 5 + 4;
                        }
                        x = 1 + 2 ^ (5-7);";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            Assert.IsTrue(ast.ScopedStatements.Count == 3);
            Assert.IsTrue(ast.ScopedStatements[0] is VarDeclrAst);
            Assert.IsTrue(ast.ScopedStatements[1].Token.TokenType == TokenType.ScopeStart);
            Assert.IsTrue(ast.ScopedStatements[2] is Expr);

            Console.WriteLine(ast);
        }
Esempio n. 22
0
        public void TestArgumentInferWithLambdasAsMethodPassing()
        {
            var test = @"
                        var func(method printer, method printer2){
                            print printer();
                            printer2();
                        }
           
                        var x = fun() -> { print 'test'; return 1; };
                        func(x,x);

                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 23
0
        public void Emit(CompilationContext context)
        {
            var grammar = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
                          .Where(c => c.Namespace == "CmC.Compiler.Syntax.Assembly" || c.Namespace == "CmC.Compiler.Syntax.Common")
                          .Where(c => typeof(ILanguageToken).IsAssignableFrom(c))
                          .Select(t => (ILanguageToken)Activator.CreateInstance(t, null)).ToList();

            var generator = new ParserGenerator(grammar);

            LanguageParser parser = generator.GetParser();

            var tokens = parser.Parse(AssemblySource, "ASM_INSTRUCTION");

            foreach (var token in tokens)
            {
                ((ICodeEmitter)token).Emit(context);
            }
        }
Esempio n. 24
0
        static void Main(string[] args)
        {
            var files = new List <string> (args).Where(File.Exists);

            var str = files.Select(File.ReadAllText)
                      .Aggregate(string.Empty, (acc, item) => acc + Environment.NewLine + item);

            if (String.IsNullOrWhiteSpace(str))
            {
                Console.WriteLine("No available files for compilation");

                return;
            }

            var ast = new LanguageParser(new Lexer(str)).Parse();

            new InterpretorVisitor().Start(ast);
        }
Esempio n. 25
0
        public override ExtraFile Import(Series series, EpisodeFile episodeFile, string path, string extension, bool readOnly)
        {
            if (SubtitleFileExtensions.Extensions.Contains(Path.GetExtension(path)))
            {
                var language     = LanguageParser.ParseSubtitleLanguage(path);
                var suffix       = GetSuffix(language, 1, false);
                var subtitleFile = ImportFile(series, episodeFile, path, readOnly, extension, suffix);
                subtitleFile.Language = language;

                _mediaFileAttributeService.SetFilePermissions(path);
                _subtitleFileService.Upsert(subtitleFile);


                return(subtitleFile);
            }

            return(null);
        }
Esempio n. 26
0
        public void ForLoopTest()
        {
            var test = @"for(int i = 0; i < 10; i = i + 1){
                            var x = z;
                        }
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse();

            var topScope = (ast as ScopeDeclr).ScopedStatements[0];

            var forLoop = topScope as ForLoop;

            Assert.IsTrue(forLoop != null);
            Assert.IsTrue(forLoop.Setup is VarDeclrAst);
            Assert.IsTrue(forLoop.Predicate.Token.TokenType == TokenType.LessThan);
            Assert.IsTrue(forLoop.Body.ScopedStatements.Count == 1);
        }
Esempio n. 27
0
        private static void ProcessSourceText(string text, CompilationContext context)
        {
            var grammar = Assembly.GetExecutingAssembly().GetTypes()
                          .Where(c => c.Namespace == "CmC.Compiler.Syntax" || c.Namespace == "CmC.Compiler.Syntax.Common")
                          .Where(c => typeof(ILanguageToken).IsAssignableFrom(c))
                          .Select(t => (ILanguageToken)Activator.CreateInstance(t, null));

            var generator = new ParserGenerator(grammar.ToList());

            LanguageParser parser = generator.GetParser();

            var tokens = parser.Parse(text);

            foreach (var token in tokens)
            {
                ((ICodeEmitter)token).Emit(context);
            }
        }
Esempio n. 28
0
        public void TestScope()
        {
            var test = @"
                        void foo(int p){
                            p = 1;    
                        }
                        int z = 5;
                        while(z > 0){
                            z = z + 1;
                            foo();
                        }
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse();

            var visitor = new ScopeBuilderVisitor();

            visitor.Start(ast);
        }
Esempio n. 29
0
        public void TestFunctionInternalsBeingForwardReferences()
        {
            var test = @"
                         var func(string printer){
                            return foo(printer);
                         }

                         var foo(string printer){
                            return printer + ""foo"";
                         }
                        
                        print func(""zing"");
                        ";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse() as ScopeDeclr;


            new InterpretorVisitor().Start(ast);
        }
Esempio n. 30
0
        public void TestExpressionInterpreterFunctionArguments()
        {
            var test = @"
                        void foo(int x){
                            if(x > 2){
                                print ((x + 1) + 2);
                            }
                            else{
                                print (x);
                            }
                        }

                        foo(1);
                        foo(100);";

            var ast = new LanguageParser(new Lexers.Lexer(test)).Parse();

            new InterpretorVisitor().Start(ast);
        }