| /* |
| Copyright 2019 Alain Dargelas |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| /* |
| * File: ParseFile.h |
| * Author: alain |
| * |
| * Created on February 24, 2017, 10:03 PM |
| */ |
| |
| #ifndef PARSEFILE_H |
| #define PARSEFILE_H |
| #include <string> |
| |
| #include "parser/SV3_1aLexer.h" |
| #include "parser/SV3_1aParser.h" |
| #include "SourceCompile/AntlrParserHandler.h" |
| #include "Design/FileContent.h" |
| |
| namespace SURELOG { |
| |
| class SV3_1aTreeShapeListener; |
| class SV3_1aPythonListener; |
| class AntlrParserErrorListener; |
| |
| class ParseFile { |
| public: |
| friend class PythonListen; |
| |
| // Helper constructor used by SVLibShapeListener |
| ParseFile(SymbolId fileId, SymbolTable* symbolTable, ErrorContainer* errors); |
| |
| // Regular file |
| ParseFile(SymbolId fileId, CompileSourceFile* csf, |
| CompilationUnit* compilationUnit, Library* library, |
| SymbolId ppFileId, bool keepParserHandler); |
| |
| // File chunk |
| ParseFile(CompileSourceFile* compileSourceFile, ParseFile* parent, |
| SymbolId chunkFileId, unsigned int offsetLine); |
| |
| bool parse(); |
| |
| virtual ~ParseFile(); |
| bool needToParse(); |
| CompileSourceFile* getCompileSourceFile() { return m_compileSourceFile; } |
| CompilationUnit* getCompilationUnit() { return m_compilationUnit; } |
| Library* getLibrary() { return m_library; } |
| const std::string getFileName(unsigned int line); |
| const std::string getPpFileName() { return getSymbol(m_ppFileId); } |
| SymbolTable* getSymbolTable(); |
| ErrorContainer* getErrorContainer(); |
| SymbolId getFileId(unsigned int line); |
| SymbolId getRawFileId() { return m_fileId; } |
| SymbolId getPpFileId() { return m_ppFileId; } |
| unsigned int getLineNb(unsigned int line); |
| |
| class LineTranslationInfo { |
| public: |
| LineTranslationInfo(SymbolId pretendFileId, unsigned int originalLine, |
| unsigned int pretendLine) |
| : m_pretendFileId(pretendFileId), |
| m_originalLine(originalLine), |
| m_pretendLine(pretendLine) {} |
| SymbolId m_pretendFileId; |
| unsigned int m_originalLine; |
| unsigned int m_pretendLine; |
| }; |
| |
| AntlrParserHandler* getAntlrParserHandler() { return m_antlrParserHandler; } |
| |
| void addLineTranslationInfo(LineTranslationInfo& info) { |
| m_lineTranslationVec.push_back(info); |
| } |
| |
| void addError(Error& error); |
| SymbolId registerSymbol(const std::string symbol); |
| SymbolId getId(const std::string symbol); |
| const std::string getSymbol(SymbolId id); |
| bool usingCachedVersion() { return m_usingCachedVersion; } |
| FileContent* getFileContent() { return m_fileContent; } |
| void setFileContent(FileContent* content) { m_fileContent = content; } |
| void setDebugAstModel() { debug_AstModel = true; } |
| std::string getProfileInfo(); |
| |
| private: |
| SymbolId m_fileId; |
| SymbolId m_ppFileId; |
| CompileSourceFile* m_compileSourceFile; |
| CompilationUnit* m_compilationUnit; |
| Library* m_library; |
| AntlrParserHandler* m_antlrParserHandler; |
| SV3_1aTreeShapeListener* m_listener; |
| std::vector<LineTranslationInfo> m_lineTranslationVec; |
| bool m_usingCachedVersion; |
| bool m_keepParserHandler; |
| FileContent* m_fileContent; |
| bool debug_AstModel; |
| |
| bool parseOneFile_(std::string fileName, unsigned int lineOffset); |
| |
| // For file chunk: |
| std::vector<ParseFile*> m_children; |
| ParseFile* m_parent; |
| unsigned int m_offsetLine; |
| SymbolTable* m_symbolTable; |
| ErrorContainer* m_errors; |
| std::string m_profileInfo; |
| }; |
| |
| }; // namespace SURELOG |
| |
| #endif /* PARSEFILE_H */ |