NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
newlang::Macro Class Reference

#include <macro.h>

Inheritance diagram for newlang::Macro:

Public Types

typedef std::map< std::string, BlockTypeMacroArgsType
 

Public Member Functions

 Macro ()
 
virtual ~Macro ()
 
std::string GetMacroMaping (const std::string str, const char *separator=", ")
 
TermPtr EvalOpMacros (TermPtr &term)
 
bool CheckMacro (const TermPtr &term)
 
bool RemoveMacro (TermPtr &term)
 
size_t GetCount ()
 
TermPtr GetMacroById (const BlockType block)
 
TermPtr GetMacro (std::vector< std::string > list)
 
std::string Dump ()
 
bool TestName (std::string_view name)
 
std::string CreateFullName (std::string_view name)
 
bool RegisterProto (TermPtr term, bool gen_exception=true)
 
bool RegisterTerm (TermPtr term)
 
bool RegisterObj (TermPtr term, ObjPtr obj)
 
void ApplyDiags (DiagPtr diag)
 
TermPtr FindTerm (std::string_view name)
 
TermPtr GetTerm (std::string_view name)
 
ObjPtr FindObj (std::string_view name)
 
ObjPtr GetObj (std::string_view name)
 

Static Public Member Functions

static std::string toMacroHash (TermPtr &term)
 
static std::string toMacroHashName (const std::string str)
 
static BlockType GetMacroId (TermPtr &term)
 
static BlockType MakeMacroId (const BlockType &seq)
 
static bool IdentityMacro (const BlockType &buffer, TermPtr &term)
 
static bool CompareMacroName (const std::string &term_name, const std::string &macro_name)
 
static size_t ExtractArgs (BlockType &buffer, TermPtr &term, MacroArgsType &args)
 
static void InsertArg_ (MacroArgsType &args, std::string name, BlockType &buffer, size_t pos=static_cast< size_t >(-1))
 
static BlockType SymbolSeparateArg_ (const BlockType &buffer, size_t pos, std::vector< std::string > name, std::string &error)
 
static BlockType ExpandMacros (const TermPtr &macro, MacroArgsType &args)
 
static std::string ExpandString (const TermPtr &macro, MacroArgsType &args)
 
static std::string Dump (const MacroArgsType &var)
 
static std::string Dump (const BlockType &arr)
 
static std::string DumpText (const BlockType &arr)
 

Public Attributes

DiagPtr m_diag
 

Static Public Attributes

static const std::string deny_chars_from_macro
 

Detailed Description

Definition at line 12 of file macro.h.

Member Typedef Documentation

◆ MacroArgsType

typedef std::map<std::string, BlockType> newlang::Macro::MacroArgsType

Коллекция аргументов макроса

Definition at line 192 of file macro.h.

Constructor & Destructor Documentation

◆ Macro()

Macro::Macro ( )

Definition at line 13 of file macro.cpp.

◆ ~Macro()

virtual newlang::Macro::~Macro ( )
inlinevirtual

Definition at line 106 of file macro.h.

Member Function Documentation

◆ toMacroHash()

std::string Macro::toMacroHash ( TermPtr & term)
static

Definition at line 16 of file macro.cpp.

References ASSERT, GetMacroId(), and toMacroHashName().

Referenced by EvalOpMacros(), newlang::ExpandTermMacro(), and RemoveMacro().

◆ toMacroHashName()

static std::string newlang::Macro::toMacroHashName ( const std::string str)
inlinestatic

Definition at line 113 of file macro.h.

References newlang::isLocalName(), and newlang::isMacroName().

Referenced by ExtractArgs(), GetMacro(), and toMacroHash().

◆ GetMacroMaping()

std::string Macro::GetMacroMaping ( const std::string str,
const char * separator = ", " )

Definition at line 248 of file macro.cpp.

References result.

◆ GetMacroId()

◆ MakeMacroId()

BlockType Macro::MakeMacroId ( const BlockType & seq)
static

◆ EvalOpMacros()

TermPtr Macro::EvalOpMacros ( TermPtr & term)

Проверяет оператор на предмет наличия операции создания или удаления макроса.

Parameters
term- оператор для проверки
Returns
Истина, если оператор содержит оператор создания или удаления макроса Выполнить (применить) макрос
Parameters
term- Термин макрос

Definition at line 390 of file macro.cpp.

References ASSERT, newlang::ASSIGN, CheckMacro(), newlang::CREATE_NEW, newlang::END, GetMacroById(), GetMacroId(), IdentityMacro(), LOG_RUNTIME, LOG_WARNING, newlang::MACRO_DEL, newlang::MACRO_SEQ, NL_PARSER, newlang::PURE_NEW, RemoveMacro(), and toMacroHash().

◆ CheckMacro()

◆ RemoveMacro()

bool Macro::RemoveMacro ( TermPtr & term)

Definition at line 472 of file macro.cpp.

References ASSERT, clear(), CompareMacroName(), GetMacroId(), newlang::MACRO_DEL, and toMacroHash().

Referenced by EvalOpMacros().

◆ GetCount()

size_t newlang::Macro::GetCount ( )
inline

Definition at line 160 of file macro.h.

◆ GetMacroById()

TermPtr Macro::GetMacroById ( const BlockType block)

Definition at line 1157 of file macro.cpp.

References GetMacro().

Referenced by EvalOpMacros().

◆ GetMacro()

TermPtr Macro::GetMacro ( std::vector< std::string > list)

Definition at line 1166 of file macro.cpp.

References CompareMacroName(), GetMacroId(), and toMacroHashName().

Referenced by GetMacroById().

◆ IdentityMacro()

bool Macro::IdentityMacro ( const BlockType & buffer,
TermPtr & term )
static

Идентифицирует входной буфер с макросом. Буфер должен заканчиваться на ';' или концом файла END, т.е. макрос грантированно присуствиет в буфере полностью.

Parameters
bufferВходной буфер лексем
termМакрос для сопоставления
Returns
Соотвествие входного буфера макросу. Для увеличения скорости работы функция не проверяет аргументы макроса (только формальное наличие или отсутствие скобок). Контроль аргументов макроса выполняется в функции ExtractArgs

Definition at line 753 of file macro.cpp.

References CompareMacroName(), newlang::END, GetMacroId(), and newlang::Parser::SkipBrackets().

Referenced by EvalOpMacros(), and newlang::ExpandTermMacro().

◆ CompareMacroName()

bool Macro::CompareMacroName ( const std::string & term_name,
const std::string & macro_name )
static

◆ ExtractArgs()

size_t Macro::ExtractArgs ( BlockType & buffer,
TermPtr & term,
MacroArgsType & args )
static

Создает коллекцию аргументов и шаблонов из буфера терминов лексера, которые используются в теле макроса Аргументами макроса могут быть шаблоны сопсоталения (термины) и аргументы в скобках верхнего уровня

Parameters
bufferВходной буфер лексем
termМакрос для сопоставления
argsКоллекция аргументов макроса
Returns
Кол-во символов входного буфера, которые нужно будет заменить телом макросом

Definition at line 862 of file macro.cpp.

References ASSERT, newlang::Term::Create(), newlang::Term::CreateSymbol(), newlang::END, GetMacroId(), InsertArg_(), newlang::INTEGER, newlang::isLocalName(), LOG_RUNTIME, newlang::MACRO_SEQ, NL_PARSER, newlang::SYMBOL, SymbolSeparateArg_(), toMacroHashName(), and newlang::toString().

Referenced by newlang::ExpandTermMacro().

◆ InsertArg_()

void Macro::InsertArg_ ( MacroArgsType & args,
std::string name,
BlockType & buffer,
size_t pos = static_cast<size_t> (-1) )
static

Definition at line 802 of file macro.cpp.

References LOG_RUNTIME.

Referenced by ExtractArgs().

◆ SymbolSeparateArg_()

BlockType Macro::SymbolSeparateArg_ ( const BlockType & buffer,
size_t pos,
std::vector< std::string > name,
std::string & error )
static

Definition at line 823 of file macro.cpp.

References result, newlang::Parser::SkipBrackets(), and newlang::SYMBOL.

Referenced by ExtractArgs().

◆ ExpandMacros()

BlockType Macro::ExpandMacros ( const TermPtr & macro,
MacroArgsType & args )
static

◆ ExpandString()

std::string Macro::ExpandString ( const TermPtr & macro,
MacroArgsType & args )
static

Definition at line 1132 of file macro.cpp.

References ASSERT, LOG_RUNTIME, newlang::MACRO_STR, ReplaceAll(), and newlang::toString().

Referenced by newlang::ExpandTermMacro().

◆ Dump() [1/3]

std::string Macro::Dump ( )

Definition at line 521 of file macro.cpp.

References result.

◆ Dump() [2/3]

std::string Macro::Dump ( const MacroArgsType & var)
static

Definition at line 553 of file macro.cpp.

References result.

◆ Dump() [3/3]

std::string Macro::Dump ( const BlockType & arr)
static

Definition at line 576 of file macro.cpp.

References result.

◆ DumpText()

std::string Macro::DumpText ( const BlockType & arr)
static

Definition at line 590 of file macro.cpp.

References result.

◆ TestName()

bool newlang::Macro::TestName ( std::string_view name)

◆ CreateFullName()

std::string newlang::Macro::CreateFullName ( std::string_view name)

◆ RegisterProto()

bool newlang::Macro::RegisterProto ( TermPtr term,
bool gen_exception = true )

Зарегистрировать новый прототип. Используется для макросов и прототипов в @__PRAGMA_PROTOTYPE__ Заполняется только поле NamedItem::proto, а остальные остаются не инициалмизированными. Требуется только для парсера при раскрытии макросов и при проверке используемых имен

Parameters
term- новый прототип для регистрации
gen_exception- возвращать false или генерировать исключение
Returns
true - если новый прототип зарегистрирован, иначе false (если gen_exception=false) или создать исключение

◆ RegisterTerm()

bool newlang::Macro::RegisterTerm ( TermPtr term)

Зарегистрировать новый термин и его прототип. Используется при определении объектов или загрузке модулей Заполняется поле NamedItem::term и NamedItem::proto - если оно не заполнено. Требуется для парсера при проверке используемых имен

Parameters
term- новый термин для регистрации
gen_exception- возвращать false или генерировать исключение
Returns
true - если новый термин зарегистрирован, иначе false (если gen_exception=false) или создать исключение

◆ RegisterObj()

bool newlang::Macro::RegisterObj ( TermPtr term,
ObjPtr obj )

Зарегистрировать объект. Заполняется поле NamedItem::obj. Поля NamedItem::term и NamedItem::proto должны присутствовать.

Parameters
term- термин
obj- Объект
gen_exception- возвращать false или генерировать исключение
Returns
true - если объект зарегистрирован, иначе false (если gen_exception=false) или создать исключение

◆ ApplyDiags()

void newlang::Macro::ApplyDiags ( DiagPtr diag)
inline

Definition at line 260 of file macro.h.

◆ FindTerm()

TermPtr Macro::FindTerm ( std::string_view name)

Функция для организации встроенных типов в иерархию наследования. Другие функции: CreateBaseType - создает базовые типы данных (для расширения классов требуется контекст) и BaseTypeConstructor - функция обратного вызова при создании нового объекта базового типа данных

Parameters
type- Базовый тип данных ObjType
parents- Список сторок с именами родительских типов
Returns
- Успешность регистрации базовго типа в иерархии

Definition at line 1287 of file macro.cpp.

References LOG_RUNTIME.

Referenced by GetTerm().

◆ GetTerm()

TermPtr newlang::Macro::GetTerm ( std::string_view name)
inline

Definition at line 268 of file macro.h.

References FindTerm(), and LOG_RUNTIME.

◆ FindObj()

ObjPtr newlang::Macro::FindObj ( std::string_view name)

Referenced by GetObj().

◆ GetObj()

ObjPtr newlang::Macro::GetObj ( std::string_view name)
inline

Definition at line 279 of file macro.h.

References FindObj(), and LOG_RUNTIME.

Member Data Documentation

◆ deny_chars_from_macro

const std::string Macro::deny_chars_from_macro
static

Definition at line 109 of file macro.h.

Referenced by MakeMacroId().

◆ m_diag

DiagPtr newlang::Macro::m_diag

Definition at line 263 of file macro.h.


The documentation for this class was generated from the following files: