Some may consider that as fairly advanced stuff already. Basics are: create a grammar, generate parser files from that, create the code to load and parse input and walk the generated parse tree. In that light you can easily find examples for basic stuff, once you know how ANTLR is organized. In the ANTLR repository there is a runtime folder with subfolders for each supported target (
https://github.com/antlr/antlr4/tree/master/runtime). Look in the individual folders to see what the target authors added. For instance in the Cpp you can find a demo for basic stuff. Additionally there is the doc folder (
https://github.com/antlr/antlr4/tree/master/doc) which contains a markdown document for each supported target language, with some details about the usage.
Symbol table creation and semantic checks are more advanced techniques and not so much related to ANTLR (as the underlying parser infrastructure doesn't play a big role here). Take a look at my antlr-graps project (
https://github.com/mike-lischke/antlr-graps) which implements GRAmmar Parsing Services for ANTLR grammars and contains a simple symbol table implementation as well as semantic checks via a listener. All that is written in TypeScript, however.
In general use the available examples for any language. The individual targets in ANTLR usually try to stay close to the Java implementation, so it shouldn't be difficult to convert code examples from one target to the other.