Previous: , Up: Symbol Table   [Contents][Index]

C.2 Symbol Types

The symbol type describes the context in which a symbol may be used, and the attributes it supports. Generally, both the compiler and linker must be aware of a given symbol type: the compiler uses the symbol type to determine the type of code to generate, and the linker uses that information to determine what section the object code should be linked to. There are exceptions, noted in their individual sections.

TAME aims to reduce the number of symbol types in favor of a generalized system with few primitives—before defining a new symbol type, consider whether the existing can be reused in a novel way. Certain symbols will be consolidated in the future, time permitting.13


Calculation.14 Calculations yield a single scalar value. If a child cgen exists, the yield of the calculation is equivalent to the sum of all its elements.


Generator.15 Generators produce a vector element for each iteration of some calculation. Generators always have a parent rate symbol.


Classification. Classifications are universal or existential quantifiers most often used as predicates.


Classification generator.16 Analogous to gen, produces a boolean element for each classification result. Unlike gen, the dimension of a given cgen is the largest of all of its predicates.


Global parameter. All TAME programs can be viewed as a function operating on a set of global inputs. Their domains are defined by their datatype, represented by the symbol attribute dtype (see Symbol Types).


Local parameter. In contrast to param, local parameters are restricted to a defined scope (e.g. function parameters; let expressions). This symbol is not used by the linker.


Local parameter parent. This is set for let expressions in place of @parent since the parent let does not actually generate a symbol.


Global constant. Constant values (of any dimension). These values may be inlined at the compiler’s discretion.


Template definition. Templates define expandable text in the form of macros (see Macro Expansion). This symbol is not used by the linker.


Datatype. A type describes the domain of a symbol. Types do not include dimension information—such is determined by the dim symbol attribute (see Symbol Format).


Function. TAME supports functions as a means of calculation reuse and abstraction. Unlike calculations, functions can recurse (see allow-circular in Symbol Format). Functions are not first-class—TAME is not a functional language.


Arbitrary metadata about the program. These metadata are key-value and are intended to be compiled statically into the program for static reference without having to actually invoke the program.



class can be a special case of rate. gen can acquire the multidimensional capabilities of cgen and the latter can be removed. param and lparam can be merged if the former is defined by a wide "local" scope. const is a special case of rate or cgen. func can be eliminated if all current rate are considered to be immediate function applications; this would also allow for mocking inputs for testing and debugging. If it’s not yet clear, TAME started as a very rigid, narrowly-focused system and began generalizing over time.


The term rate (a verb) is a consequence of TAME’s origin as an insurance rating system. This symbol type will be renamed to calc eventually.


The name is regrettable—it originated from the concept of a generator function, but never turned out that way. gen is actually a list comprehension, and will likely be renamed in the future to reflect that.


See footnote for gen.

Previous: , Up: Symbol Table   [Contents][Index]