I made some small adaptations to your parser to make parsing just that little bit easier. This does not improve the functionality of the parser, only the usability.
you changed some Lexer tokens to strings in the metadata section. This means i now have to match the actual string in java-code to match this. Changed it to named parser rules so i can use those
added a SEMICOLON lexer token, So that can be used in the parsing of terminology code constraints with assumed values. Could also be solved (perhaps better?) with a different parser rule
c_string now directly has a STRING instead of a string_value. Same content, but not consistent with the rest of the grammar and therefore can require some extra code.
I made some small adaptations to your parser to make parsing just that little bit easier. This does not improve the functionality of the parser, only the usability.
See https://github.com/nedap/archie/commit/0109786d8110addb562c2bf049c0475041e31efc