Skip to content

Go target, unable to check when custom error strategy is in recovery mode #3259

@seth2810

Description

@seth2810

Hello, community!

I am trying to move existing parser error strategy from c++ to golang target:

class MyErrorStrategy: public antlr4::DefaultErrorStrategy {
  void reportUnwantedToken(antlr4::Parser* recognizer) override {
    if (inErrorRecoveryMode(recognizer)) {
      return;
    }

    antlr4::Token* t = recognizer->getCurrentToken();
    std::string tokenName = getTokenErrorDisplay(t);
    antlr4::misc::IntervalSet expecting = getExpectedTokens(recognizer);

    throw CustomException({
      {"extraneous input " + tokenName, Position {int(t->getLine()), int(t->getCharPositionInLine()) + 1}},
      {" expecting " + expecting.toString(recognizer->getVocabulary()), Position()}
    });
  }
};

But I have a "small problem". Unlike c++, golang does not provide the ability to call private / unexported methods. This small difference makes it impossible to check when the strategy is inErrorRecoveryMode.

I saw that the strategy method GetTokenErrorDisplay was made public, as well as the parser method GetCurrentToken in contrast to the c++ runtime, where it has private access. Perhaps it's time to also make the inErrorRecoveryMode method public? I find an explanation why the methods of controlling the state flag are private, but I don't understand why method for reading it has private access.

I also assume that there is another way to do this check. If I'm right, please tell me how I can do it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions