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?

有帮助吗?

解决方案

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top