#include <CFGrammar.h>
|
typedef u32_t | Kind |
|
typedef u32_t | Attribute |
|
typedef u32_t | VariableAttribute |
|
typedef struct SVF::GrammarBase::Symbol | Symbol |
|
template<typename Key , typename Value , typename Hash = SymbolHash, typename KeyEqual = std::equal_to<Key>, typename Allocator = std::allocator<std::pair<const Key, Value>>> |
using | SymbolMap = std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > |
|
template<typename Key , typename Hash = SymbolVectorHash, typename KeyEqual = std::equal_to<Key>, typename Allocator = std::allocator<Key>> |
using | SymbolSet = std::unordered_set< Key, Hash, KeyEqual, Allocator > |
|
typedef std::vector< Symbol > | Production |
|
typedef SymbolSet< Production > | Productions |
|
|
Map< std::string, Kind > & | getNonterminals () |
|
void | setNonterminals (Map< std::string, Kind > &nonterminals) |
|
Map< std::string, Kind > & | getTerminals () |
|
void | setTerminals (Map< std::string, Kind > &terminals) |
|
Map< std::string, Kind > & | getEBNFSigns () |
|
void | setEBNFSigns (Map< std::string, Kind > &EBNFSigns) |
|
SymbolMap< Symbol, Productions > & | getRawProductions () |
|
const Map< Kind, Set< Attribute > > & | getKindToAttrsMap () const |
|
Kind | getTotalKind () |
|
Kind | getStartKind () |
|
void | setStartKind (Kind startKind) |
|
void | setTotalKind (Kind totalKind) |
|
std::string | extractKindStrFromSymbolStr (const std::string &symbolStr) const |
|
std::string | extractAttributeStrFromSymbolStr (const std::string &symbolStr) const |
|
void | setRawProductions (SymbolMap< Symbol, Productions > &rawProductions) |
|
void | setKindToAttrsMap (const Map< Kind, Set< Attribute >> &kindToAttrsMap) |
|
void | setAttributeKinds (const Set< Kind > &attributeKind) |
|
Kind | strToKind (std::string str) const |
|
Symbol | strToSymbol (const std::string str) const |
|
std::string | kindToStr (Kind kind) const |
|
std::string | symToStrDump (Symbol sym) const |
|
Symbol | getSymbol (const Production &prod, u32_t pos) |
|
const Set< Kind > & | getAttrSyms () const |
|
Kind | insertNonterminalKind (std::string const kindStr) |
| Insert kind to nonterminal and return kind. More...
|
|
Kind | insertTerminalKind (std::string strLit) |
|
Symbol | insertSymbol (std::string strLit) |
|
Symbol | insertNonTerminalSymbol (std::string strLit) |
|
Symbol | insertTerminalSymbol (std::string strLit) |
|
Symbol | insertEBNFSigns (std::string strLit) |
|
void | insertAttribute (Kind kind, Attribute a) |
|
Definition at line 36 of file CFGrammar.h.
◆ Attribute
◆ Kind
◆ Production
◆ Productions
◆ Symbol
◆ SymbolMap
template<typename Key , typename Value , typename Hash = SymbolHash, typename KeyEqual = std::equal_to<Key>, typename Allocator = std::allocator<std::pair<const Key, Value>>>
◆ SymbolSet
template<typename Key , typename Hash = SymbolVectorHash, typename KeyEqual = std::equal_to<Key>, typename Allocator = std::allocator<Key>>
◆ VariableAttribute
◆ extractAttributeStrFromSymbolStr()
Definition at line 219 of file CFGrammar.cpp.
223 auto underscorePosition = symbolStr.find_last_of(
"_", symbolStr.size()-1);
224 if (underscorePosition == std::string::npos)
228 return symbolStr.substr(underscorePosition+1);
◆ extractKindStrFromSymbolStr()
Definition at line 207 of file CFGrammar.cpp.
211 auto underscorePosition = symbolStr.find_last_of(
"_", symbolStr.size()-1);
212 if (underscorePosition == std::string::npos)
216 return symbolStr.substr(0, underscorePosition);
◆ getAttributedKind()
Definition at line 265 of file CFGrammar.h.
static constexpr unsigned char EdgeKindMaskBits
We use the lower 8 bits to denote edge kind.
◆ getAttrSyms()
const Set<Kind>& SVF::GrammarBase::getAttrSyms |
( |
| ) |
const |
|
inline |
Definition at line 243 of file CFGrammar.h.
Set< Kind > attributeKinds
Map contains Signs' String and associated Symbols.
◆ getEBNFSigns()
Definition at line 180 of file CFGrammar.h.
Map< std::string, Kind > EBNFSigns
◆ getKindToAttrsMap()
Definition at line 195 of file CFGrammar.h.
Map< Kind, Set< Attribute > > kindToAttrsMap
◆ getNonterminals()
Definition at line 160 of file CFGrammar.h.
Map< std::string, Kind > nonterminals
◆ getRawProductions()
Definition at line 190 of file CFGrammar.h.
SymbolMap< Symbol, Productions > rawProductions
◆ getStartKind()
Kind SVF::GrammarBase::getStartKind |
( |
| ) |
|
|
inline |
◆ getSymbol()
◆ getTerminals()
Definition at line 170 of file CFGrammar.h.
Map< std::string, Kind > terminals
◆ getTotalKind()
Kind SVF::GrammarBase::getTotalKind |
( |
| ) |
|
|
inline |
◆ getVariabledKind()
Definition at line 270 of file CFGrammar.h.
static constexpr unsigned char AttributedKindMaskBits
We use the lower 24 bits to denote attributed kind.
◆ insertAttribute()
Definition at line 327 of file CFGrammar.cpp.
std::unordered_set< Key, Hash, KeyEqual, Allocator > Set
◆ insertEBNFSigns()
Definition at line 311 of file CFGrammar.cpp.
Kind strToKind(std::string str) const
struct SVF::GrammarBase::Symbol Symbol
◆ insertNonterminalKind()
Insert kind to nonterminal and return kind.
Definition at line 192 of file CFGrammar.cpp.
◆ insertNonTerminalSymbol()
Definition at line 249 of file CFGrammar.cpp.
256 if ( attributeStr ==
"")
return symbol;
258 if ( (attributeStr.size() == 1) && (
std::isalpha(attributeStr[attributeStr.size()-1])) )
261 symbol.variableAttribute = (
u32_t)attributeStr[attributeStr.size()-1];
265 for(
char &c : attributeStr)
270 <<
" Attribute:" << attributeStr <<
" (only number or single alphabet.)";
271 assert(
false &&
"grammar loading failed!");
275 symbol.attribute = std::stoi(attributeStr);
std::string extractAttributeStrFromSymbolStr(const std::string &symbolStr) const
std::string extractKindStrFromSymbolStr(const std::string &symbolStr) const
Kind insertNonterminalKind(std::string const kindStr)
Insert kind to nonterminal and return kind.
int isalpha(int character)
std::string errMsg(const std::string &msg)
Print error message by converting a string into red string output.
std::ostream & errs()
Overwrite llvm::errs()
◆ insertSymbol()
Definition at line 231 of file CFGrammar.cpp.
234 if ((symbolStr.size() == 1) && (!
isalpha(symbolStr[0])))
238 else if (
isupper(symbolStr[0]))
Symbol insertEBNFSigns(std::string strLit)
Symbol insertNonTerminalSymbol(std::string strLit)
Symbol insertTerminalSymbol(std::string strLit)
◆ insertTerminalKind()
From SymbolStr extract kind to inserted in nonterminal symbolStr = <kindStr> [_] [ attributeStr | variableattributeStr ]
Definition at line 177 of file CFGrammar.cpp.
◆ insertTerminalSymbol()
Definition at line 280 of file CFGrammar.cpp.
287 if ( attributeStr ==
"")
return symbol;
289 if ( (attributeStr.size() == 1) && (
std::isalpha(attributeStr[attributeStr.size()-1])) )
292 symbol.variableAttribute = (
u32_t)attributeStr[attributeStr.size()-1];
296 for(
char &c : attributeStr)
301 <<
" Attribute:" << attributeStr <<
" (only number or single alphabet.)";
302 assert(
false &&
"grammar loading failed!");
306 symbol.attribute = std::stoi(attributeStr);
Kind insertTerminalKind(std::string strLit)
◆ kindToStr()
Definition at line 103 of file CFGrammar.cpp.
109 if (i.second == kind)
119 if (ni.second == kind)
129 if (i.second == kind)
◆ setAttributeKinds()
void GrammarBase::setAttributeKinds |
( |
const Set< Kind > & |
attributeKind | ) |
|
◆ setEBNFSigns()
◆ setKindToAttrsMap()
◆ setNonterminals()
◆ setRawProductions()
◆ setStartKind()
void SVF::GrammarBase::setStartKind |
( |
Kind |
startKind | ) |
|
|
inline |
◆ setTerminals()
◆ setTotalKind()
void SVF::GrammarBase::setTotalKind |
( |
Kind |
totalKind | ) |
|
|
inline |
◆ strToKind()
Definition at line 55 of file CFGrammar.cpp.
70 assert(
false &&
"kind not found!");
◆ strToSymbol()
Definition at line 74 of file CFGrammar.cpp.
81 if ( attributeStr ==
"")
return symbol;
83 if ( (attributeStr.size() == 1) && (
std::isalpha(attributeStr[attributeStr.size()-1])) )
85 symbol.variableAttribute = (
u32_t)attributeStr[attributeStr.size()-1];
89 for(
char &c : attributeStr)
94 <<
" Attribute:" << attributeStr <<
" (only number or single alphabet.)";
95 assert(
false &&
"grammar loading failed!");
98 symbol.attribute = std::stoi(attributeStr);
◆ symToStrDump()
Definition at line 139 of file CFGrammar.cpp.
141 Kind kind = sym.kind;
147 if (i.second == kind)
153 key.append(std::to_string(attribute));
162 if (ni.second == kind)
168 nkey.append(std::to_string(attribute));
◆ AttributedKindMaskBits
constexpr unsigned char SVF::GrammarBase::AttributedKindMaskBits = 24 |
|
staticconstexprprotected |
We use the lower 24 bits to denote attributed kind.
Definition at line 277 of file CFGrammar.h.
◆ attributeKinds
Set<Kind> SVF::GrammarBase::attributeKinds |
|
private |
Map contains Signs' String and associated Symbols.
Definition at line 284 of file CFGrammar.h.
◆ EBNFSigns
◆ EdgeKindMask
◆ EdgeKindMaskBits
constexpr unsigned char SVF::GrammarBase::EdgeKindMaskBits = 8 |
|
staticconstexprprotected |
We use the lower 8 bits to denote edge kind.
Definition at line 276 of file CFGrammar.h.
◆ kindToAttrsMap
◆ nonterminals
◆ rawProductions
◆ startKind
Kind SVF::GrammarBase::startKind |
|
protected |
◆ terminals
◆ totalKind
u32_t SVF::GrammarBase::totalKind |
|
private |
The documentation for this class was generated from the following files: