Antlr4 was recommended to me by Federico.
I love it, but becoming frustrating because I am unable to build the runtime on C++.
I am also relatively new in C++ and find it challenging to have a grip of CMake.
I successfully generated a C++ parser code from the Calculator grammar in the repo.
I am using CLion IDE.
====================[ Build | cpp_calculator_project | Debug ]==================
/var/lib/snapd/snap/clion/169/bin/cmake/linux/bin/cmake --build /home/leber/CLionProjects/cpp_calculator_project/cmake-build-debug --target cpp_calculator_project -- -j 6
-- Configuring done
-- Generating done
-- Build files have been written to: /home/leber/CLionProjects/cpp_calculator_project/cmake-build-debug
[ 50%] Linking CXX executable cpp_calculator_project
/usr/bin/ld: CMakeFiles/cpp_calculator_project.dir/main.cpp.o: warning: relocation against `_ZTVN6antlr417CommonTokenStreamE' in read-only section `.text._ZN6antlr417CommonTokenStreamD2Ev[_ZN6antlr417CommonTokenStreamD5Ev]'
/usr/bin/ld: CMakeFiles/cpp_calculator_project.dir/main.cpp.o: in function `engine(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
/home/leber/CLionProjects/cpp_calculator_project/main.cpp:11: undefined reference to `antlr4::ANTLRInputStream::ANTLRInputStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:14: undefined reference to `CalculatorLexer::CalculatorLexer(antlr4::CharStream*)'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:17: undefined reference to `antlr4::CommonTokenStream::CommonTokenStream(antlr4::TokenSource*)'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:20: undefined reference to `CalculatorParser::CalculatorParser(antlr4::TokenStream*)'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:23: undefined reference to `CalculatorParser::expression()'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:24: undefined reference to `CalculatorParser::~CalculatorParser()'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:24: undefined reference to `CalculatorLexer::~CalculatorLexer()'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:24: undefined reference to `CalculatorParser::~CalculatorParser()'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/main.cpp:24: undefined reference to `CalculatorLexer::~CalculatorLexer()'
/usr/bin/ld: CMakeFiles/cpp_calculator_project.dir/main.cpp.o: in function `antlr4::ANTLRInputStream::~ANTLRInputStream()':
/home/leber/CLionProjects/cpp_calculator_project/libs/antlr4-runtime/runtime/src/ANTLRInputStream.h:15: undefined reference to `vtable for antlr4::ANTLRInputStream'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/libs/antlr4-runtime/runtime/src/ANTLRInputStream.h:15: undefined reference to `antlr4::CharStream::~CharStream()'
/usr/bin/ld: CMakeFiles/cpp_calculator_project.dir/main.cpp.o: in function `antlr4::BufferedTokenStream::~BufferedTokenStream()':
/home/leber/CLionProjects/cpp_calculator_project/libs/antlr4-runtime/runtime/src/BufferedTokenStream.h:24: undefined reference to `vtable for antlr4::BufferedTokenStream'
/usr/bin/ld: /home/leber/CLionProjects/cpp_calculator_project/libs/antlr4-runtime/runtime/src/BufferedTokenStream.h:24: undefined reference to `antlr4::TokenStream::~TokenStream()'
/usr/bin/ld: CMakeFiles/cpp_calculator_project.dir/main.cpp.o: in function `antlr4::CommonTokenStream::~CommonTokenStream()':
/home/leber/CLionProjects/cpp_calculator_project/libs/antlr4-runtime/runtime/src/CommonTokenStream.h:36: undefined reference to `vtable for antlr4::CommonTokenStream'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/cpp_calculator_project.dir/build.make:93: cpp_calculator_project] Error 1
make[2]: *** [CMakeFiles/Makefile2:83: CMakeFiles/cpp_calculator_project.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:90: CMakeFiles/cpp_calculator_project.dir/rule] Error 2
make: *** [Makefile:124: cpp_calculator_project] Error 2