Как построить предоставленную грамматику antlr?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как построить предоставленную грамматику antlr?

Сообщение Anonymous »

Я хотел бы создать анализатор cpp с использованием cpp, и я использую ANTLR4. Я заметил, что на официальном сайте github antlr grammar github есть раздел «грамматика», и я его скачал. Открывая файл CPP внутри, я замечаю, что есть CPP14Parser и CPP14Lexer, а также есть еще один файл CPP с CPPParser. Я просматривал документацию несколько дней, но, похоже, она устарела. Я пробовал запустить antlr-4, но позже при попытке его компиляции постоянно получал ошибки. Тем не менее, CMakeLists.txt и main (в основном все остальные файлы), которые я написал, работают в более старой версии, где все более чисто. Версия, которую я успешно собрал. Может ли кто-нибудь научить меня, как создать последнюю версию текущей грамматики? Пожалуйста, дайте мне знать, если нужен более конкретный контекст! Заранее спасибо!
Изменить:
Шаг, который я сделал, был указан ниже: я установил старую версию 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)
и у меня есть файл main.cpp, записанный в папке /src, /generated, содержащий файлы, сгенерированные после запуска antlr4 -Dlanguage=Cpp -visitor, /cppruntime для среды выполнения из официального антлер github. Итак, я запустил следующую команду в Ubuntu

Код: Выделить всё

mkdir build && cd build
cmake ..
make
Он работает отлично, однако, когда я пытаюсь скомпилировать последний файл, представленный на github, используя те же шаги, я получаю массу ошибок при запуске команды 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
|                  ^~~~
В случае необходимости мой файл main.cpp выглядит следующим образом

Код: Выделить всё

#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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»