This document is meant to be a normative spec about the TableGen language
in and of itself (i.e. how to understand a given construct in terms of how
it affects the final set of records represented by the TableGen file). If
you are unsure if this document is really what you are looking for, please
read the introduction to TableGen first.

The lexical and syntax notation used here is intended to imitate
Python’s. In particular, for lexical definitions, the productions
operate at the character level and there is no implied whitespace between
elements. The syntax definitions operate at the token level, so there is
implied whitespace between tokens.

You can declare an empty class by giving and empty TemplateArgList
and an empty ObjectBody. This can serve as a restricted form of
forward declaration: note that records deriving from the forward-declared
class will inherit no fields from it since the record expansion is done
when the record is parsed.

The peculiar last form of RangePiece is due to the fact that the
“-” is included in the TokInteger, hence 1-5 gets lexed as
two consecutive TokInteger‘s, with values 1 and -5,
instead of “1”, “-”, and “5”.
The RangeList can be thought of as specifying “list slice” in some
contexts.

This generates a new anonymous record definition (as would be created by an
unnamed def inheriting from the given class with the given template
arguments) and the value is the value of that record definition.