Question

This is my ANTLR script:

greeting:
  'hello'
  NAME
  { /* do something with $NAME.text */ }
  ;

This input causes an NPE because NAME is null:

hello

I understand that I can check whether $NAME is not null and only then do my manipulations with $NAME.text, but I have that problem in many places in the script. Should I always do if ($NAME != null) or maybe there is some other more elegant mechanism?

Was it helpful?

Solution

In ANTLR 4, you should relocate the embedded actions to a listener or visitor which you separately execute after the parsing phase is complete. You can use the Parser.getNumberOfSyntaxErrors method prior to starting that phase to see if any parse errors occurred, and if so, stop processing at that point.

This covers all actions associated with the parser at once and results in a much cleaner overall code structure.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top