public void MyVariantsTest()
        {
            var cExpression = "b=2*a[n]; b=d;";

            var c = new SyntacticAnalysis(cExpression, new Glossary());

            Assert.IsTrue(c.Errors.Count == 0);
        }
        public void ExtraSpacesTest()
        {
            var cExpression = "b=2*a[n]; b d;";

            var c = new SyntacticAnalysis(cExpression, new Glossary());

            Assert.IsTrue(c.Errors.Any());
        }
        public void IndexerTest()
        {
            var cExpression = "b = a[];";

            var c = new SyntacticAnalysis(cExpression, new Glossary());

            Assert.IsTrue(c.Errors.Any());
        }
        public void BracketNotOpenedTest()
        {
            var cExpression = "b=2*a[n]); b = d;";

            var c = new SyntacticAnalysis(cExpression, new Glossary());

            Assert.IsTrue(c.Errors.Any());
        }
Example #5
0
        public void ElseTest()
        {
            var expression = "else {a = 0;}";

            var c = new SyntacticAnalysis(expression, new Glossary());

            Assert.IsTrue(c.OldErrors.Count == 1);
        }
Example #6
0
        public void IfTest()
        {
            var expression = "if a > b  a = 8;";

            var c = new SyntacticAnalysis(expression, new Glossary());

            Assert.IsTrue(c.OldErrors.Count == 1);
        }
Example #7
0
        public void TypesTest()
        {
            var expression = "int b=2*a[n]; unsigned long b = d; int[] a = 0;";

            var c = new SyntacticAnalysis(expression, new Glossary());

            Assert.IsTrue(c.OldErrors.Count == 0);
        }
        public void AssignationTest()
        {
            var cExpression = "1 = 9;";

            var c = new SyntacticAnalysis(cExpression, new Glossary());

            Assert.IsTrue(c.Errors.Any());
        }
        public void RandomTests()
        {
            {
                var cExpression = "a = (2* 3 + 0 - (1*7-(9+3)));";

                var c = new SyntacticAnalysis(cExpression, new Glossary());

                Assert.IsTrue(c.Errors.Count == 0);
            }
        }
Example #10
0
        public void Compile(string source)
        {
            var syntacticAnalysis = new SyntacticAnalysis();
            var ast = syntacticAnalysis.Run(source);

            var semanticAnalysis = new SemanticAnalysis();

            semanticAnalysis.Run(ast);

            // Generate IL program

            /*var ilGenerator = new ILGenerator();
             * return ilGenerator.Build(ast);*/
        }
        public void BinaryOperatorsNotWith2OperandsTest()
        {
            {
                var cExpression = "b = 1 + 3 * ;";

                var c = new SyntacticAnalysis(cExpression, new Glossary());

                Assert.IsTrue(c.Errors.Any());
            }

            {
                var cExpression = "b = 1 + /3 ;";

                var c = new SyntacticAnalysis(cExpression, new Glossary());

                Assert.IsTrue(c.Errors.Any());
            }
        }
        public void QuoteNotClosedTest()
        {
            {
                var cExpression = "b= \"fsdgdgd\";";

                var c = new SyntacticAnalysis(cExpression, new Glossary());

                Assert.IsTrue(c.Errors.Count == 0);
            }

            {
                var cExpression = "b= \"fsdgdgd;";

                var c = new SyntacticAnalysis(cExpression, new Glossary());

                Assert.IsTrue(c.Errors.Any());
            }
        }
Example #13
0
        public void SetCanonicalSets( SyntacticAnalysis.Grammar grammar, SyntacticAnalysis.LR.LR0CanonicalSets canonical_sets )
        {
            this.grammar = grammar;
            this.canonical_sets = canonical_sets;

            this.marked_nodes.Clear();
            this.marked_edges.Clear();

            this.RebuildGraph();
            this.FlagUpdate(true);
        }
Example #14
0
 public void MarkAction( SyntacticAnalysis.TerminalSymbol terminal, Color color )
 {
     for( int i = 0; i < this.GridView.Rows.Count; ++i )
         this.GridView[this.grammar.Terminals.IndexOf(terminal), i].Style.BackColor = color;
 }
Example #15
0
 public void MarkGoto( SyntacticAnalysis.GrammaticalSymbol grammatical, Color color )
 {
     for( int i = 0; i < this.GridView.Rows.Count; ++i )
         this.GridView[this.grammar.Terminals.Count +
             this.grammar.Grammaticals.IndexOf(grammatical) - 1, i].Style.BackColor = color;
 }
Example #16
0
 public void SetTable( SyntacticAnalysis.ExtendedGrammar grammar, SyntacticAnalysis.LR.ParserTable table )
 {
     this.grammar = grammar;
     this.table = table;
     this.UpdateTable();
 }
Example #17
0
        public void MarkTransition( int state_index, SyntacticAnalysis.Symbol symbol, Color line_color, Color label_color )
        {
            var edge = this.out_edge_map[state_index][symbol];

            if( edge.LinePen == this.edge_pen )
            {
                edge.LinePen = (Pen)this.edge_pen.Clone();
                edge.LinePen.Color = line_color;
            }
            else
            {
                edge.LinePen.Color = line_color;
            }

            if( edge.LabelBrush == this.label_brush )
                edge.LabelBrush = new SolidBrush(label_color);
            else
                ((SolidBrush)edge.LabelBrush).Color = label_color;

            this.marked_edges.Add(edge);
            this.FlagUpdate(false);
        }
Example #18
0
        public async Task DoUpdateAsync()
        {
            if (IsDisposed)
            {
                return;
            }

            var buffer = _currentSnapshot;
            var path   = _document.FilePath;

            // replace with user token
            var token    = _cts.Token;
            var instance = await FsLintVsPackage.Instance.WithCancellation(token);

            // this acts as a throttle
            await Task.Delay(200, token);

            if (Project == null)
            {
                await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

                var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject;

                if (project == null)
                {
                    return;
                }

                if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK)
                {
                    return;
                }

                if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK)
                {
                    return;
                }

                Project = new LintProjectInfo(project.Name, guid, vsHierarchy);
            }

            await Task.Yield();

            var connectionString = SqlAnalyzer.tryFindConnectionString(path);

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                return;
            }



            var source     = _currentSnapshot.GetText();
            var sourceText = SourceText.ofString(source);

            var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript(
                filename: path,
                source: sourceText,
                assumeDotNetFramework: false,
                useSdkRefs: true,
                useFsiAuxLib: true,
                previewEnabled: true,
                otherFlags: new string[] { "--targetprofile:netstandard" },
                loadedTimeStamp: FSharpOption <DateTime> .None,
                extraProjectInfo: FSharpOption <object> .None,
                optionsStamp: FSharpOption <long> .None,
                userOpName: FSharpOption <string> .None,
                sdkDirOverride: FSharpOption <string> .None
                );

            var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token);

            if (errors.Any())
            {
                return;
            }

            var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject(
                filename: path,
                fileVersion: 1,
                sourceText: sourceText,
                options: options,
                userOpName: FSharpOption <string> .None
                );

            var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token);

            if (parseResults.ParseHadErrors || checkAnswer.IsAborted)
            {
                return;
            }

            var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value;

            var context = new SqlAnalyzerContext(
                fileName: path,
                content: source.Split('\n'),
                parseTree: parseResults.ParseTree.Value,
                symbols: SqlAnalyzer.getSymbols(checkResults)
                );

            var operationBlocks = SyntacticAnalysis.findSqlOperations(context);
            var loadedSchema    = SqlAnalysis.databaseSchema(connectionString);

            var errorMessages = new List <Message>();

            if (loadedSchema.IsError)
            {
                foreach (var operation in operationBlocks)
                {
                    var containsSkipAnalysis = operation.blocks.Any(block => block.IsSkipAnalysis);
                    foreach (var block in operation.blocks)
                    {
                        var blockRange = block.Range();
                        if ((block.IsQuery || block.IsTransaction) && OptionModule.IsSome(blockRange) && !containsSkipAnalysis)
                        {
                            var internalError = (loadedSchema.ErrorValue ?? "").Replace("3D000:", "").Replace("28P01:", "");
                            var fullError     = $"Error occured while trying to connect to the database using the configured connection string in NPGSQL_FSHARP in order to perform static analysis:{internalError}";
                            var errorMessage  = new Message(
                                type: "Error",
                                message: fullError,
                                code: "SQL101",
                                severity: Severity.Warning,
                                range: blockRange.Value,
                                fixes: Microsoft.FSharp.Collections.FSharpList <Fix> .Empty
                                );

                            errorMessages.Add(errorMessage);
                        }
                    }
                }
            }
            else
            {
                var databaseSchema = loadedSchema.ResultValue;
                foreach (var operation in operationBlocks)
                {
                    foreach (var analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema))
                    {
                        errorMessages.Add(analysisOutput);
                    }
                }
            }

            var oldLintingErrors = this.Factory.CurrentSnapshot;
            var newLintErrors    = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1);

            foreach (var error in errorMessages)
            {
                var span = RangeToSpan(error.Range, buffer);
                newLintErrors.Errors.Add(new LintError(span, error, Project));
            }

            await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (token.IsCancellationRequested)
            {
                return;
            }

            UpdateLintingErrors(newLintErrors);
        }
Example #19
0
 public TestCompiler()
 {
     this.syntacticAnalysis = new SyntacticAnalysis();
     this.semanticAnalysis  = new SemanticAnalysis();
 }
        public async Task DoUpdateAsync()
        {
            if (IsDisposed)
            {
                return;
            }

            var buffer = _currentSnapshot;
            var path   = _document.FilePath;

            // replace with user token
            var token    = _cts.Token;
            var instance = await FsLintVsPackage.Instance.WithCancellation(token);

            // this acts as a throttle
            await Task.Delay(200, token);

            if (Project == null)
            {
                await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

                var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject;

                if (project == null)
                {
                    return;
                }

                if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK)
                {
                    return;
                }

                if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK)
                {
                    return;
                }

                Project = new LintProjectInfo(project.Name, guid, vsHierarchy);
            }

            await Task.Yield();

            var connectionString = SqlAnalyzer.tryFindConnectionString(path);

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                return;
            }

            var loadedSchema = SqlAnalysis.databaseSchema(connectionString);

            if (loadedSchema.IsError)
            {
                return;
            }

            var source     = _currentSnapshot.GetText();
            var sourceText = SourceText.ofString(source);

            var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript(
                filename: path,
                sourceText: sourceText,
                assumeDotNetFramework: false,
                useSdkRefs: true,
                useFsiAuxLib: true,
                previewEnabled: true,
                otherFlags: new string[] { "--targetprofile:netstandard" },
                loadedTimeStamp: FSharpOption <DateTime> .None,
                extraProjectInfo: FSharpOption <object> .None,
                optionsStamp: FSharpOption <long> .None,
                userOpName: FSharpOption <string> .None
                );

            var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token);

            if (errors.Any())
            {
                return;
            }

            var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject(
                filename: path,
                fileversion: 1,
                sourceText: sourceText,
                options: options,
                textSnapshotInfo: FSharpOption <object> .None,
                userOpName: FSharpOption <string> .None
                );

            var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token);

            if (parseResults.ParseHadErrors || checkAnswer.IsAborted)
            {
                return;
            }

            var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value;

            var context = new SqlAnalyzerContext(
                fileName: path,
                content: source.Split('\n'),
                parseTree: parseResults.ParseTree.Value,
                symbols: SqlAnalyzer.getSymbols(checkResults)
                );

            var databaseSchema = loadedSchema.ResultValue;

            var errorMessages =
                from operation in SyntacticAnalysis.findSqlOperations(context)
                from analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema)
                select analysisOutput;

            var oldLintingErrors = this.Factory.CurrentSnapshot;
            var newLintErrors    = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1);

            foreach (var error in errorMessages)
            {
                var span = RangeToSpan(error.Range, buffer);
                newLintErrors.Errors.Add(new LintError(span, error, Project));
            }

            await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (token.IsCancellationRequested)
            {
                return;
            }

            UpdateLintingErrors(newLintErrors);
        }
Example #21
0
 public TestParser(bool keepSources = false)
 {
     this.syntacticAnalysis = new SyntacticAnalysis();
     this.Sources           = new List <string>();
     this.keepSources       = keepSources;
 }