سؤال

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