Skip to content

BodyParser

INCLUDE FILE
#include "BodyParser.h"

class BodyParser

This class parses object and macro bodies.

DEFINITION
class BodyParser;

class IfNestingprivate

DEFINITION
class IfNesting;

method add_clause

DEFINITION
void  add_clause ( Expression  condition );
PARAMETERDESCRIPTION
condition

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

method sizeconst

DEFINITION
size_t  size ( ) const;
RETURNSDESCRIPTION
size_t

member clausesprivate

DEFINITION
std::vector< IfBodyClause >  clauses;

class Nestingprivate

DEFINITION
class Nesting;

destructor ~Nestingvirtual

DEFINITION
virtual ~Nesting ( );

method as

DEFINITION
template <typename T>
T * as ( );
RETURNSDESCRIPTION
T *

method asconst

DEFINITION
template <typename T>
const T * as ( ) const;
RETURNSDESCRIPTION
const T *

method bodyvirtual

DEFINITION
virtual Body  body ( ) = 0;
RETURNSDESCRIPTION
Body

method isconst

DEFINITION
template <typename T>
bool  is ( ) const;
RETURNSDESCRIPTION
bool

method operator[]virtual

DEFINITION
virtual Body * operator[] ( size_t  index ) = 0;
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

class NestingIndexprivate

DEFINITION
class NestingIndex;

constructor NestingIndex

DEFINITION
NestingIndex ( size_t  nesting_index,
size_t  sub_index );
PARAMETERDESCRIPTION
nesting_index
sub_index

member nesting_index

DEFINITION
size_t  nesting_index;

member sub_index

DEFINITION
size_t  sub_index;

class RepeatNestingprivate

DEFINITION
class RepeatNesting;

constructor RepeatNesting

DEFINITION
RepeatNesting ( Symbol  variable,
Location  variable_location,
std::optional< Expression >  start,
Expression  end,
std::shared_ptr< Scope >  containing_scope );
PARAMETERDESCRIPTION
variable
variable_location
start
end
containing_scope

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

member containing_scopeprivate

DEFINITION
std::shared_ptr< Scope >  containing_scope;

member endprivate

DEFINITION
Expression  end;

member inner_bodyprivate

DEFINITION
Body  inner_body;

member startprivate

DEFINITION
Expression  start;

member variableprivate

DEFINITION
Symbol  variable;

member variable_locationprivate

DEFINITION
Location  variable_location;

class ScopeNestingprivate

DEFINITION
class ScopeNesting;

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

member inner_body

DEFINITION
Body  inner_body;

enum ParsingType

Type of body being parsed.

DEFINITION
enum ParsingType;
VALUEDESCRIPTION
ENTITY

Parsing a macro or object from source.

OUTPUT

Parsing .output section from target.

STRUCTURED_VALUE

Parsing body in StructuredValue from object file.

constructor BodyParser

Constructs a BodyParser for parsing an entity or output.

If allow_assigns is true, it will parse an entity (macro or object) and allow assignments. If false, it will parse an output section.

DEFINITION
BodyParser ( Tokenizer & tokenizer,
const CPU * cpu,
std::shared_ptr< Scope >  environment,
bool  allow_assigns );
PARAMETERDESCRIPTION
tokenizer

The tokenizer to parse the entity or output from.

cpu

The CPU context.

environment

The environment the body is in.

allow_assigns

Whether assignments are allowed.

constructor BodyParser

Constructs a BodyParser for parsing a StructuredValue.

DEFINITION
BodyParser ( Tokenizer & tokenizer,
std::shared_ptr< Scope >  environment );
PARAMETERDESCRIPTION
tokenizer

The tokenizer to parse the StructuredValue from.

environment

The environment the body is in.

method add_constantprivate

DEFINITION
void  add_constant ( Visibility  visibility,
const Token & name,
const Expression & value );
PARAMETERDESCRIPTION
visibility
name
value

method allow_assignmentconst private

DEFINITION
bool  allow_assignment ( ) const;
RETURNSDESCRIPTION
bool

method allow_instructionsconst private

DEFINITION
bool  allow_instructions ( ) const;
RETURNSDESCRIPTION
bool

method allow_memoryconst private

DEFINITION
bool  allow_memory ( ) const;
RETURNSDESCRIPTION
bool

method current_sizeprivate

DEFINITION
SizeRange  current_size ( );
RETURNSDESCRIPTION
SizeRange

method get_bodyconst private

DEFINITION
Body * get_body ( const NestingIndex & nesting_index ) const;
PARAMETERDESCRIPTION
nesting_index
RETURNSDESCRIPTION
Body *

method get_labelconst private

DEFINITION
Expression  get_label ( const Location & location,
Symbol  name ) const;
PARAMETERDESCRIPTION
location
name
RETURNSDESCRIPTION
Expression

method get_pc_labelprivate

DEFINITION
Expression  get_pc_label ( );
RETURNSDESCRIPTION
Expression

method handle_nameprivate

DEFINITION
void  handle_name ( Visibility  visibility,
const Token & name );
PARAMETERDESCRIPTION
visibility
name

method is_definedconst private

DEFINITION
bool  is_defined ( Symbol  symbol ) const;
PARAMETERDESCRIPTION
symbol
RETURNSDESCRIPTION
bool

method is_definedconst private

DEFINITION
bool  is_defined ( const Token & token ) const;
PARAMETERDESCRIPTION
token
RETURNSDESCRIPTION
bool

method parse

Parses the body from the tokenizer.

DEFINITION
Body  parse ( );
RETURNSDESCRIPTION
Body

The parsed body.

method parse_assignmentprivate

DEFINITION
void  parse_assignment ( Visibility  visibility,
const Token & name );
PARAMETERDESCRIPTION
visibility
name

method parse_binary_fileprivate

DEFINITION
void  parse_binary_file ( );

method parse_checksumprivate

DEFINITION
void  parse_checksum ( );

method parse_dataprivate

DEFINITION
void  parse_data ( );

method parse_directiveprivate

DEFINITION
void  parse_directive ( const Token & directive );
PARAMETERDESCRIPTION
directive

method parse_elseprivate

DEFINITION
void  parse_else ( );

method parse_else_ifprivate

DEFINITION
void  parse_else_if ( );

method parse_errorprivate

DEFINITION
void  parse_error ( );

method parse_ifprivate

DEFINITION
void  parse_if ( );

method parse_instructionprivate

DEFINITION
void  parse_instruction ( const Token & name );
PARAMETERDESCRIPTION
name

method parse_instruction_argumentprivate

DEFINITION
std::shared_ptr< Node >  parse_instruction_argument ( const Token & token );
PARAMETERDESCRIPTION
token
RETURNSDESCRIPTION
std::shared_ptr< Node >

method parse_labelprivate

DEFINITION
void  parse_label ( Visibility  visibility,
const Token & name );
PARAMETERDESCRIPTION
visibility
name

method parse_memoryprivate

DEFINITION
void  parse_memory ( );

method parse_repeatprivate

DEFINITION
void  parse_repeat ( );

method parse_scopeprivate

DEFINITION
void  parse_scope ( );

method parse_unnamed_labelprivate

DEFINITION
void  parse_unnamed_label ( );

method pop_bodyprivate

DEFINITION
void  pop_body ( );

method push_bodyprivate

DEFINITION
void  push_body ( const NestingIndex & body_index );
PARAMETERDESCRIPTION
body_index

method push_clauseprivate

DEFINITION
void  push_clause ( Expression  condition );
PARAMETERDESCRIPTION
condition

method setupstatic

Sets up the FileTokenizer for parsing bodies.

DEFINITION
static void  setup ( FileTokenizer & tokenizer );
PARAMETERDESCRIPTION
tokenizer

The FileTokenizer to set up.

member bodyprivate

DEFINITION
Body  body;

member cpuprivate

DEFINITION
const CPU * cpu;

member current_bodyprivate

DEFINITION
Body * current_body;

member directive_parser_methodsstatic private

DEFINITION
static const std::unordered_map< Symbol, void(BodyParser::*)()>  directive_parser_methods;

member end_tokenprivate

DEFINITION
Token  end_token;

member environmentprivate

DEFINITION
std::shared_ptr< Scope >  environment;

member nestingprivate

DEFINITION
std::vector< std::unique_ptr< Nesting > >  nesting;

member nesting_indicesprivate

DEFINITION
std::vector< NestingIndex >  nesting_indices;

member next_labelprivate

DEFINITION
uint64_t  next_label;

member parsing_typeprivate

DEFINITION
ParsingType  parsing_type;

member symbol_pcstatic private

DEFINITION
static const Symbol  symbol_pc;

member token_binary_filestatic private

DEFINITION
static const Token  token_binary_file;

member token_checksumstatic private

DEFINITION
static const Token  token_checksum;

member token_datastatic private

DEFINITION
static const Token  token_data;

member token_elsestatic private

DEFINITION
static const Token  token_else;

member token_else_ifstatic private

DEFINITION
static const Token  token_else_if;

member token_endstatic private

DEFINITION
static const Token  token_end;

member token_errorstatic private

DEFINITION
static const Token  token_error;

member token_ifstatic private

DEFINITION
static const Token  token_if;

member token_lengthstatic private

DEFINITION
static const Token  token_length;

member token_memorystatic private

DEFINITION
static const Token  token_memory;

member token_repeatstatic private

DEFINITION
static const Token  token_repeat;

member token_scopestatic private

DEFINITION
static const Token  token_scope;

member token_startstatic private

DEFINITION
static const Token  token_start;

member tokenizerprivate

DEFINITION
Tokenizer & tokenizer;

class IfNestingprivate

DEFINITION
class IfNesting;

method add_clause

DEFINITION
void  add_clause ( Expression  condition );
PARAMETERDESCRIPTION
condition

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

method sizeconst

DEFINITION
size_t  size ( ) const;
RETURNSDESCRIPTION
size_t

member clausesprivate

DEFINITION
std::vector< IfBodyClause >  clauses;

class Nestingprivate

DEFINITION
class Nesting;

destructor ~Nestingvirtual

DEFINITION
virtual ~Nesting ( );

method as

DEFINITION
template <typename T>
T * as ( );
RETURNSDESCRIPTION
T *

method asconst

DEFINITION
template <typename T>
const T * as ( ) const;
RETURNSDESCRIPTION
const T *

method bodyvirtual

DEFINITION
virtual Body  body ( ) = 0;
RETURNSDESCRIPTION
Body

method isconst

DEFINITION
template <typename T>
bool  is ( ) const;
RETURNSDESCRIPTION
bool

method operator[]virtual

DEFINITION
virtual Body * operator[] ( size_t  index ) = 0;
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

class NestingIndexprivate

DEFINITION
class NestingIndex;

constructor NestingIndex

DEFINITION
NestingIndex ( size_t  nesting_index,
size_t  sub_index );
PARAMETERDESCRIPTION
nesting_index
sub_index

member nesting_index

DEFINITION
size_t  nesting_index;

member sub_index

DEFINITION
size_t  sub_index;

class RepeatNestingprivate

DEFINITION
class RepeatNesting;

constructor RepeatNesting

DEFINITION
RepeatNesting ( Symbol  variable,
Location  variable_location,
std::optional< Expression >  start,
Expression  end,
std::shared_ptr< Scope >  containing_scope );
PARAMETERDESCRIPTION
variable
variable_location
start
end
containing_scope

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

member containing_scopeprivate

DEFINITION
std::shared_ptr< Scope >  containing_scope;

member endprivate

DEFINITION
Expression  end;

member inner_bodyprivate

DEFINITION
Body  inner_body;

member startprivate

DEFINITION
Expression  start;

member variableprivate

DEFINITION
Symbol  variable;

member variable_locationprivate

DEFINITION
Location  variable_location;

class ScopeNestingprivate

DEFINITION
class ScopeNesting;

method body

DEFINITION
Body  body ( );
RETURNSDESCRIPTION
Body

method operator[]

DEFINITION
Body * operator[] ( size_t  index );
PARAMETERDESCRIPTION
index
RETURNSDESCRIPTION
Body *

member inner_body

DEFINITION
Body  inner_body;