antlr / antlr4

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.
http://antlr.org
BSD 3-Clause "New" or "Revised" License
17.04k stars 3.27k forks source link

[C++] Building grammar with rule named "match" causes errors #4614

Open appleplectic opened 4 months ago

appleplectic commented 4 months ago

With the simple ANTLR4 grammar:

grammar Example;

MATCH: 'match';
VALUE: 'hello';

match: MATCH VALUE;

Building this into C++ gives the error:

FAILED: CMakeFiles/ExampleInterpreter.dir/ExampleGrammar/ExampleParser.cpp.obj 
C:\msys64\mingw64\bin\c++.exe -DANTLR4CPP_STATIC -IC:/Users/user/CLionProjects/min/cmake-build-debug/_deps/antlr-src/runtime/Cpp/runtime/src -IC:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar -IC:/Users/user/CLionProjects/min/src -g -std=gnu++20 -fdiagnostics-color=always -Werror -MD -MT CMakeFiles/ExampleInterpreter.dir/ExampleGrammar/ExampleParser.cpp.obj -MF CMakeFiles\ExampleInterpreter.dir\ExampleGrammar\ExampleParser.cpp.obj.d -o CMakeFiles/ExampleInterpreter.dir/ExampleGrammar/ExampleParser.cpp.obj -c C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp: In member function 'ExampleGrammar::ExampleParser::MatchContext* ExampleGrammar::ExampleParser::match()':
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:149:10: error: no matching function for call to 'ExampleGrammar::ExampleParser::match(ExampleGrammar::ExampleParser::<unnamed enum>)'
  149 |     match(ExampleParser::MATCH);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:135:30: note: candidate: 'ExampleGrammar::ExampleParser::MatchContext* ExampleGrammar::ExampleParser::match()'
  135 | ExampleParser::MatchContext* ExampleParser::match() {
      |                              ^~~~~~~~~~~~~
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:135:30: note:   candidate expects 0 arguments, 1 provided
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:151:10: error: no matching function for call to 'ExampleGrammar::ExampleParser::match(ExampleGrammar::ExampleParser::<unnamed enum>)'
  151 |     match(ExampleParser::VALUE);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:135:30: note: candidate: 'ExampleGrammar::ExampleParser::MatchContext* ExampleGrammar::ExampleParser::match()'
  135 | ExampleParser::MatchContext* ExampleParser::match() {
      |                              ^~~~~~~~~~~~~
C:/Users/user/CLionProjects/min/cmake-build-debug/ExampleGrammar/ExampleParser.cpp:135:30: note:   candidate expects 0 arguments, 1 provided
[141/142] Building CXX object CMakeFiles/ExampleInterpreter.dir/ExampleGrammar/ExampleLexer.cpp.obj
ninja: build stopped: subcommand failed.