# zxdb/expr

This directory handles parsing and evaluating console expressions. These are
what appear in the "print" command, for example.

They are not to be confused with "DWARF expressions" which are small programs
used to evaluate the location of variables.

## Main Components

_Tokenizer:_ The tokenizer is in `expr_tokenizer.cc` and converts input into a
stream of tokens that can be used by the parser.

_Parser:_ The parser is in `expr_parser.cc` and converts tokens into the
Abstract Syntax Tree.

_Abstract Syntax Tree:_ This tree is in `expr_node.cc` where each `ExprNode`
subclass is a node in the tree. These nodes know how to recursively execute
themselves to produce a result.

_Expression Value:_ The `ExprValue` is in `expr_value.cc` and represents a
value when executing the Abstract Syntax Tree. Each value has a type that
describes it (a reference to the DWARF symbol data) and the binary data
associated with the value.

## Integration with the outside world

The abstract syntax tree code that executes doesn't actually refer directly to
the symbol data or the running process. Mostly this is to allow better unit
testing.

_Looking up symbols:_ The abstract syntax tree nodes look up variables using
the abstract `EvalContext`. The `EvalContextImpl` is the normal concrete
implementation of this class that references the symbols associated with a
process (`ProcessSymbols`) and provides access to the `SymbolDataProvider`
implementation that reads data from the running process.

## Helper components

The rest of the code in this directory are helper classes for executing the
syntax tree, in particular for converting names to variable declarations
(`find_variable.*` and `found_*`) and converting various types of variable
accesses to data (`resolve_*`).

An `Identifier` is a parsing of a variable name (or potentially other things
that look like names) and is generated by the parser. The
`TemplateTypeExtractor` helps finding the template parameters in an
`Identifier`.
