Изменить:
Шаг, который я сделал, был указан ниже: я установил старую версию CPP14.g4 (как написано в описании выше) и написал свой написал свой собственный CMakeLists.txt
Код: Выделить всё
cmake_minimum_required(VERSION 3.14)
project(CPPparser)
set(CMAKE_CXX_STANDARD 17)
include_directories(
${PROJECT_SOURCE_DIR}/generated/
${PROJECT_SOURCE_DIR}/cppruntime/src/
${PROJECT_SOURCE_DIR}/src/
)
set(src_dir
${PROJECT_SOURCE_DIR}/generated/CPP14Lexer.cpp
${PROJECT_SOURCE_DIR}/generated/CPP14Parser.cpp
${PROJECT_SOURCE_DIR}/generated/CPP14Visitor.cpp
${PROJECT_SOURCE_DIR}/generated/CPP14BaseVisitor.cpp
)
file(GLOB antlr4-cpp-src
${PROJECT_SOURCE_DIR}/cppruntime/src/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/atn/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/dfa/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/internal/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/misc/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/support/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/tree/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/tree/pattern/*.cpp
${PROJECT_SOURCE_DIR}/cppruntime/src/tree/xpath/*.cpp
)
add_library (antlr4-cpp-runtime ${antlr4-cpp-src})
add_executable(CPPparser ${src_dir} src/main.cpp)
target_link_libraries(CPPparser antlr4-cpp-runtime)
Код: Выделить всё
mkdir build && cd build
cmake ..
make
Ошибка указана ниже
Код: Выделить всё
: error: expected class-name before ‘{’ token
12 | class CPP14Parser : public CPP14ParserBase {
| ^
/home/user/CPnew/generated/CPP14Parser.h:118:3: error: ‘CPP14Parser::~CPP14Parser()’ marked ‘override’, but does not override
118 | ~CPP14Parser() override;
| ^
/home/user/CPnew/generated/CPP14Parser.h:120:15: error: ‘std::string CPP14Parser::getGrammarFileName() const’ marked ‘override’, but does not override
120 | std::string getGrammarFileName() const override;
| ^~~~~~~~~~~~~~~~~~
/home/user/CPnew/generated/CPP14Parser.h:122:27: error: ‘const antlr4::atn::ATN& CPP14Parser::getATN() const’ marked ‘override’, but does not override
122 | const antlr4::atn::ATN& getATN() const override;
| ^~~~~~
/home/user/CPnew/generated/CPP14Parser.h:124:35: error: ‘const std::vector& CPP14Parser::getRuleNames() const’ marked ‘override’, but does not override
124 | const std::vector& getRuleNames() const override;
| ^~~~~~~~~~~~
/home/user/CPnew/generated/CPP14Parser.h:126:34: error: ‘const antlr4::dfa::Vocabulary& CPP14Parser::getVocabulary() const’ marked ‘override’, but does not override
126 | const antlr4::dfa::Vocabulary& getVocabulary() const override;
| ^~~~~~~~~~~~~
/home/user/CPnew/generated/CPP14Parser.h:128:34: error: ‘antlr4::atn::SerializedATNView CPP14Parser::getSerializedATN() const’ marked ‘override’, but does not override
128 | antlr4::atn::SerializedATNView getSerializedATN() const override;
| ^~~~~~~~~~~~~~~~
/home/user/CPnew/generated/CPP14Parser.h:3895:8: error: ‘bool CPP14Parser::sempred(antlr4::RuleContext*, size_t, size_t)’ marked ‘override’, but does not override
3895 | bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;
| ^~~~~~~
/home/user/CPnew/cppruntime/src/CPP14ParserBase.cpp:5:6: error: ‘CPP14ParserBase’ has not been declared
5 | bool CPP14ParserBase::IsPureSpecifierAllowed()
| ^~~~~~~~~~~~~~~
/home/user/CPnew/cppruntime/src/CPP14ParserBase.cpp: In function ‘bool IsPureSpecifierAllowed()’:
/home/user/CPnew/cppruntime/src/CPP14ParserBase.cpp:9:18: error: invalid use of ‘this’ in non-member function
9 | auto x = this->getRuleContext(); // memberDeclarator
| ^~~~
Код: Выделить всё
#include
#include "CPP14Lexer.h"
#include "CPP14Parser.h"
using namespace antlr4;
int main(int argc, const char* argv[]) {
const char* filepath = argv[1];
std::ifstream ifs;
ifs.open(filepath);
ANTLRInputStream input(ifs);
CPP14Lexer lexer(&input);
CommonTokenStream tokens(&lexer);
CPP14Parser parser(&tokens);
tree::ParseTree* tree = parser.translationunit();
if (parser.getNumberOfSyntaxErrors() > 0) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78690457/how-to-build-the-antlr-grammar-provided[/url]