VapourSynth-llvmexpr
Loading...
Searching...
No Matches
AnalysisEngine.hpp
Go to the documentation of this file.
1
19
20#ifndef LLVMEXPR_FRONTEND_INFIX2POSTFIX_ANALYSISENGINE_HPP
21#define LLVMEXPR_FRONTEND_INFIX2POSTFIX_ANALYSISENGINE_HPP
22
23#include "AST.hpp"
24#include "Preprocessor.hpp"
25#include "types.hpp"
26#include <cstdint>
27#include <memory>
28#include <string>
29#include <vector>
30
31namespace infix2postfix {
32
33enum class DiagnosticSeverity : std::uint8_t {
36};
37
38struct Diagnostic {
40 std::string message;
42
43 Diagnostic(DiagnosticSeverity sev, std::string msg, Range r)
44 : severity(sev), message(std::move(msg)), range(r) {}
45};
46
47class SemanticAnalyzer; // Forward declaration
48
50 public:
51 AnalysisEngine(const std::vector<Token>& tokens, Mode mode, int num_inputs,
52 int num_intermediate_inputs,
53 const std::vector<LineMapping>& line_map,
54 int library_line_count = 0);
56
61
62 bool runAnalysis();
63
64 std::string generateCode();
65
66 [[nodiscard]] const Program* getAST() const { return ast.get(); }
67 Program* getAST() { return ast.get(); }
68
69 [[nodiscard]] const std::vector<Diagnostic>& getDiagnostics() const {
70 return diagnostics;
71 }
72
73 [[nodiscard]] bool hasErrors() const;
74
75 [[nodiscard]] std::string formatDiagnostics() const;
76
77 private:
78 std::vector<Token> tokens;
79 Mode mode;
80 int num_inputs;
81 int num_intermediate_inputs;
82 std::vector<LineMapping> line_map;
83 int library_line_count;
84
85 std::unique_ptr<Program> ast;
86 std::unique_ptr<SemanticAnalyzer> semantic_analyzer;
87 std::vector<Diagnostic> diagnostics;
88};
89
90} // namespace infix2postfix
91
92#endif // LLVMEXPR_FRONTEND_INFIX2POSTFIX_ANALYSISENGINE_HPP
AnalysisEngine(const AnalysisEngine &)=delete
AnalysisEngine & operator=(AnalysisEngine &&)=delete
AnalysisEngine(AnalysisEngine &&)=delete
const std::vector< Diagnostic > & getDiagnostics() const
const Program * getAST() const
std::string formatDiagnostics() const
AnalysisEngine(const std::vector< Token > &tokens, Mode mode, int num_inputs, int num_intermediate_inputs, const std::vector< LineMapping > &line_map, int library_line_count=0)
AnalysisEngine & operator=(const AnalysisEngine &)=delete
DiagnosticSeverity severity
Diagnostic(DiagnosticSeverity sev, std::string msg, Range r)