BOOST_SPIRIT_CLASSIC_NS;
51 #include <boost/spirit.hpp> 52 #include <boost/spirit/core.hpp> 53 #include <boost/spirit/tree/ast.hpp> 54 #include <boost/spirit/tree/parse_tree.hpp> 55 #include <boost/spirit/tree/tree_to_xml.hpp> 56 using namespaceboost::spirit;
78 #define HGVS_THROW(err_code, message) NCBI_THROW(CHgvsParser::CHgvsParserException, err_code, message) 91fOpFlags_RelaxedAA = 1 << 0,
92fOpFlags_Default = fOpFlags_RelaxedAA
98 stringAsHgvsExpression(
const CSeq_feat& feat);
120 switch(GetErrCode()) {
121 caseeLogic:
return "eLogic";
122 caseeGrammatic:
return "eGrammatic";
123 caseeSemantic:
return "eSemantic";
124 caseeContext:
return "eContext";
125 caseeAlignment:
return "eAlignment";
126 caseePrecondition:
return "ePrecondition";
127 case eOther:
return "eOther";
152fuzz->Assign(*other.
fuzz);
192pnt->Assign(*other.
pnt);
211start_offset.Reset();
223loc.Reset(
newCSeq_loc);
225loc->Assign(*other.
loc);
231 returnstart_offset.value || start_offset.value || stop_offset.fuzz || stop_offset.fuzz;
273m_mol_type = eMol_not_set;
281 returnm_bsh.GetBioseqLength();
289 voidSetId(
const CSeq_id&
id, EMolType mol_type);
293 if(!m_loc.IsOffset()) {
311 return!m_loc.loc.IsNull();
319 constCSeq_loc&
GetLoc()
const;
327EMolType GetMolType(
bool check=
true)
const;
419 if(s_rule_names->size() == 0) {
420m_[eID_NONE] =
"NONE";
421m_[eID_root] =
"root";
422m_[eID_list1a] =
"list1a";
423m_[eID_list2a] =
"list2a";
424m_[eID_list3a] =
"list3a";
425m_[eID_list1b] =
"list1b";
426m_[eID_list2b] =
"list2b";
427m_[eID_list3b] =
"list3b";
428m_[eID_expr1] =
"expr1";
429m_[eID_expr2] =
"expr2";
430m_[eID_expr3] =
"expr3";
431m_[eID_translocation] =
"translocation";
432m_[eID_header] =
"header";
433m_[eID_location] =
"location";
434m_[eID_mol] =
"mol";
435m_[eID_seq_id] =
"seq_id";
436m_[eID_mut_list] =
"mut_list";
437m_[eID_mut_ref] =
"mut_ref";
438m_[eID_nuc_range] =
"nuc_range";
439m_[eID_prot_range] =
"prot_range";
440m_[eID_mut_inst] =
"mut_inst";
441m_[eID_int_fuzz] =
"int_fuzz";
442m_[eID_abs_pos] =
"abs_pos";
443m_[eID_general_pos] =
"general_pos";
444m_[eID_fuzzy_pos] =
"fuzzy_pos";
445m_[eID_pos_spec] =
"pos_spec";
446m_[eID_raw_seq] =
"raw_seq";
447m_[eID_aminoacid] =
"aminoacid";
448m_[eID_nuc_subst] =
"nuc_subst";
449m_[eID_deletion] =
"deletion";
450m_[eID_insertion] =
"insertion";
451m_[eID_delins] =
"delins";
452m_[eID_duplication] =
"duplication";
453m_[eID_nuc_inv] =
"nuc_inv";
454m_[eID_ssr] =
"ssr";
455m_[eID_conversion] =
"conversion";
456m_[eID_seq_loc] =
"seq_loc";
457m_[eID_seq_ref] =
"seq_ref";
458m_[eID_prot_pos] =
"prot_pos";
459m_[eID_prot_fs] =
"prot_fs";
460m_[eID_prot_missense] =
"prot_missense";
461m_[eID_prot_ext] =
"prot_ext";
463 returns_rule_names.
Get();
466 static const string& s_GetRuleName(parser_id
id);
468 template<
typenameScannerT>
471rule<ScannerT, parser_context<>, parser_tag<eID_root> >
root;
472rule<ScannerT, parser_context<>, parser_tag<eID_list1a> >
list1a;
473rule<ScannerT, parser_context<>, parser_tag<eID_list2a> >
list2a;
474rule<ScannerT, parser_context<>, parser_tag<eID_list3a> >
list3a;
475rule<ScannerT, parser_context<>, parser_tag<eID_list1b> >
list1b;
476rule<ScannerT, parser_context<>, parser_tag<eID_list2b> >
list2b;
477rule<ScannerT, parser_context<>, parser_tag<eID_list3b> >
list3b;
478rule<ScannerT, parser_context<>, parser_tag<eID_expr1> >
expr1;
479rule<ScannerT, parser_context<>, parser_tag<eID_expr2> >
expr2;
480rule<ScannerT, parser_context<>, parser_tag<eID_expr3> >
expr3;
481rule<ScannerT, parser_context<>, parser_tag<eID_translocation> >
translocation;
482rule<ScannerT, parser_context<>, parser_tag<eID_header> >
header;
483rule<ScannerT, parser_context<>, parser_tag<eID_seq_id> >
seq_id;
484rule<ScannerT, parser_context<>, parser_tag<eID_mol> >
mol;
485rule<ScannerT, parser_context<>, parser_tag<eID_mut_list > >
mut_list;
486rule<ScannerT, parser_context<>, parser_tag<eID_mut_ref> >
mut_ref;
487rule<ScannerT, parser_context<>, parser_tag<eID_mut_inst> >
mut_inst;
488rule<ScannerT, parser_context<>, parser_tag<eID_int_fuzz> >
int_fuzz;
489rule<ScannerT, parser_context<>, parser_tag<eID_abs_pos> >
abs_pos;
490rule<ScannerT, parser_context<>, parser_tag<eID_general_pos> >
general_pos;
491rule<ScannerT, parser_context<>, parser_tag<eID_fuzzy_pos> >
fuzzy_pos;
492rule<ScannerT, parser_context<>, parser_tag<eID_pos_spec> >
pos_spec;
493rule<ScannerT, parser_context<>, parser_tag<eID_location> >
location;
494rule<ScannerT, parser_context<>, parser_tag<eID_nuc_range> >
nuc_range;
495rule<ScannerT, parser_context<>, parser_tag<eID_prot_range> >
prot_range;
496rule<ScannerT, parser_context<>, parser_tag<eID_raw_seq> >
raw_seq;
497rule<ScannerT, parser_context<>, parser_tag<eID_aminoacid> >
aminoacid;
498rule<ScannerT, parser_context<>, parser_tag<eID_nuc_subst> >
nuc_subst;
499rule<ScannerT, parser_context<>, parser_tag<eID_deletion> >
deletion;
500rule<ScannerT, parser_context<>, parser_tag<eID_insertion> >
insertion;
501rule<ScannerT, parser_context<>, parser_tag<eID_delins> >
delins;
502rule<ScannerT, parser_context<>, parser_tag<eID_duplication> >
duplication;
503rule<ScannerT, parser_context<>, parser_tag<eID_nuc_inv> >
nuc_inv;
504rule<ScannerT, parser_context<>, parser_tag<eID_ssr> >
ssr;
505rule<ScannerT, parser_context<>, parser_tag<eID_conversion> >
conversion;
506rule<ScannerT, parser_context<>, parser_tag<eID_seq_loc> >
seq_loc;
507rule<ScannerT, parser_context<>, parser_tag<eID_seq_ref> >
seq_ref;
508rule<ScannerT, parser_context<>, parser_tag<eID_prot_pos> >
prot_pos;
509rule<ScannerT, parser_context<>, parser_tag<eID_prot_missense> >
prot_missense;
510rule<ScannerT, parser_context<>, parser_tag<eID_prot_ext> >
prot_ext;
511rule<ScannerT, parser_context<>, parser_tag<eID_prot_fs> >
prot_fs;
515aminoacid = str_p(
"Ala")
537| chset<>(
"XARNDCEQGHILKMFPSTWYV")
540raw_seq = leaf_node_d[+aminoacid | +chset<>(
"ACGTN") | +chset<>(
"acgun")];
556int_fuzz = ch_p(
'(') >> (ch_p(
'?')|int_p) >> ch_p(
'_') >> (ch_p(
'?')|int_p) >> ch_p(
')')
557| ch_p(
'(') >> int_p >> ch_p(
')')
558| (ch_p(
'?')|int_p);
560abs_pos = !ch_p(
'*') >> int_fuzz;
564general_pos = (str_p(
"IVS") >> int_p | abs_pos) >> sign_p >> int_fuzz
570fuzzy_pos = discard_node_d[ch_p(
'(')]
572>> discard_node_d[ch_p(
'_')]
574>> discard_node_d[ch_p(
')')];
576pos_spec = general_pos
578| !ch_p(
'o') >> header >> pos_spec;
581prot_pos = raw_seq >> pos_spec;
583prot_range = prot_pos >> discard_node_d[ch_p(
'_')] >> prot_pos;
585nuc_range = pos_spec >> discard_node_d[ch_p(
'_')] >> pos_spec;
587 location= nuc_range | pos_spec | prot_range | prot_pos;
593seq_id = leaf_node_d[alpha_p >> +(alnum_p | chset<>(
"._-|"))];
595mol = str_p(
"mt") | chset<>(
"gcrpm");
598>> !(discard_node_d[ch_p(
'{')]
600>> discard_node_d[ch_p(
'}')])
601>> discard_node_d[ch_p(
':')]
603>> discard_node_d[ch_p(
'.')];
612seq_loc = !ch_p(
'o') >> header >>
location;
615| (nuc_range|prot_range)
623nuc_subst = raw_seq >> ch_p(
'>') >> raw_seq;
625deletion = str_p(
"del") >> !(raw_seq | int_p);
627duplication = str_p(
"dup") >> !seq_ref;
629insertion = str_p(
"ins") >> seq_ref;
631conversion = str_p(
"con") >> seq_loc;
633delins = str_p(
"del") >> !raw_seq >> str_p(
"ins") >> seq_ref;
635nuc_inv = str_p(
"inv") >> !int_p;
637ssr = !raw_seq >> ( int_fuzz - (ch_p(
'?')|int_p)
638| list_p(discard_node_d[ch_p(
'[')]
640>> discard_node_d[ch_p(
']')],
641discard_node_d[ch_p(
'+')]));
655prot_fs = str_p(
"fs") >> !(ch_p(
'X') >> int_p);
657prot_ext = (str_p(
"extMet") | str_p(
"extX")) >> int_p;
659prot_missense = aminoacid;
662translocation = str_p(
"t(")
663>> leaf_node_d[*(print_p - ch_p(
'(') - ch_p(
')'))]
665>> leaf_node_d[*(print_p - ch_p(
'(') - ch_p(
')'))]
669mut_inst = ch_p(
'?')
688root = list_p(expr1, ch_p(
'+'));
694expr1 = ch_p(
'(') >> expr1 >> ch_p(
')')
698list1a = list_p(discard_node_d[ch_p(
'[')] >> list1b >> discard_node_d[ch_p(
']')], ch_p(
'+'));
699list1b = list_p(expr1, chset<>(
",;") | str_p(
"(+)"));
702expr2 = ch_p(
'(') >> expr2 >> ch_p(
')')
710list2a = list_p(discard_node_d[ch_p(
'[')] >> list2b >> discard_node_d[ch_p(
']')], ch_p(
'+'));
711list2b = list_p(expr2, chset<>(
",;") | str_p(
"(+)"));
714expr3 = ch_p(
'(') >> expr3 >> ch_p(
')')
724list3a = list_p(discard_node_d[ch_p(
'[')] >> list3b >> discard_node_d[ch_p(
']')], ch_p(
'+'));
725list3b = list_p(expr3, chset<>(
",;") | str_p(
"(+)"));
730rule<ScannerT, parser_context<>, parser_tag<eID_root> >
const&
start()
const 738 return id== SGrammar::eID_list1a
739||
id== SGrammar::eID_list2a
740||
id== SGrammar::eID_list3a
741||
id== SGrammar::eID_list1b
742||
id== SGrammar::eID_list2b
743||
id== SGrammar::eID_list3b
744||
id== SGrammar::eID_root;
752 typedefTParseTreeMatch::const_tree_iterator
TIterator;
796 static strings_hgvsaa2ncbieaa(
const string& hgvsaa);
799 static strings_hgvsUCaa2hgvsUL(
const string& hgvsaa);
806 constCSeq_loc& parent_loc,
813 stringx_GetInstData(
const CVariation_inst& inst,
constCSeq_loc& this_loc);
824 stringx_LocToSeqStr(
constCSeq_loc& loc);
833 stringx_SeqLocToStr(
constCSeq_loc& loc,
boolwith_header);
839 stringx_SeqIdToHgvsHeader(
const CSeq_id&
id);
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
T & Get(void)
Create the variable if not created yet, return the reference.
namespace ncbi::objects::
Set of related Variations.
void Validate(const CSeq_literal &literal) const
void SetLoc(const SOffsetLoc &loc)
CContext(CRef< CScope > scope)
TSeqPos GetLength() const
CContext(const CContext &other)
CScope & GetScope() const
NCBI_EXCEPTION_DEFAULT(CHgvsParserException, CException)
@ eGrammatic
Expression is not a valid language.
@ eAlignment
Some problem with getting alignment.
@ ePrecondition
Precondition is not met.
@ eLogic
Problem with the code.
@ eSemantic
Expression is invalid in some way.
@ eContext
Some problem with context.
virtual const char * GetErrCodeString(void) const
Get error code interpreted as text.
tree_match< char const * > TParseTreeMatch
CVariation_inst::TDelta::value_type TDelta
static CSafeStatic< SGrammar > s_grammar
CVariation_ref::TData::TSet TVariationSet
static CRef< CVariation_ref > s_ProtToCdna(const CVariation_ref &vr, CScope &scope)
TParseTreeMatch::const_tree_iterator TIterator
CHgvsParser(CScope &scope)
Include a standard set of the NCBI C++ Toolkit most basic headers.
static const char location[]
unsigned int TSeqPos
Type for sequence locations and lengths.
EErrCode
Error types that an application can generate.
virtual const char * GetErrCodeString(void) const
Get error code interpreted as text.
const CSeq_id & GetId(const CSeq_loc &loc, CScope *scope)
If all CSeq_ids embedded in CSeq_loc refer to the same CBioseq, returns the first CSeq_id found,...
TSeqPos GetLength(const CSeq_id &id, CScope *scope)
Get sequence length if scope not null, else return max possible TSeqPos.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
CTempString literal(const char(&str)[Size])
Templatized initialization from a string literal.
double value_type
The numeric datatype used by the parser.
const GenericPointer< typename T::ValueType > T2 value
Portable reference counted smart and weak pointers using CWeakRef, CRef, CObject and CObjectEx.
int GetLoc(const string &acc, const string &pat, CSeq_loc &loc, CScope &scope)
void Assign(const SFuzzyInt &other)
rule< ScannerT, parser_context<>, parser_tag< eID_insertion > > insertion
rule< ScannerT, parser_context<>, parser_tag< eID_seq_loc > > seq_loc
rule< ScannerT, parser_context<>, parser_tag< eID_seq_ref > > seq_ref
rule< ScannerT, parser_context<>, parser_tag< eID_prot_fs > > prot_fs
rule< ScannerT, parser_context<>, parser_tag< eID_prot_pos > > prot_pos
rule< ScannerT, parser_context<>, parser_tag< eID_prot_range > > prot_range
rule< ScannerT, parser_context<>, parser_tag< eID_list3b > > list3b
rule< ScannerT, parser_context<>, parser_tag< eID_expr1 > > expr1
rule< ScannerT, parser_context<>, parser_tag< eID_nuc_subst > > nuc_subst
rule< ScannerT, parser_context<>, parser_tag< eID_location > > location
rule< ScannerT, parser_context<>, parser_tag< eID_list3a > > list3a
rule< ScannerT, parser_context<>, parser_tag< eID_delins > > delins
rule< ScannerT, parser_context<>, parser_tag< eID_abs_pos > > abs_pos
rule< ScannerT, parser_context<>, parser_tag< eID_prot_ext > > prot_ext
rule< ScannerT, parser_context<>, parser_tag< eID_nuc_inv > > nuc_inv
rule< ScannerT, parser_context<>, parser_tag< eID_ssr > > ssr
rule< ScannerT, parser_context<>, parser_tag< eID_general_pos > > general_pos
rule< ScannerT, parser_context<>, parser_tag< eID_pos_spec > > pos_spec
rule< ScannerT, parser_context<>, parser_tag< eID_header > > header
rule< ScannerT, parser_context<>, parser_tag< eID_mut_ref > > mut_ref
rule< ScannerT, parser_context<>, parser_tag< eID_list2b > > list2b
rule< ScannerT, parser_context<>, parser_tag< eID_root > > const & start() const
rule< ScannerT, parser_context<>, parser_tag< eID_list1b > > list1b
rule< ScannerT, parser_context<>, parser_tag< eID_int_fuzz > > int_fuzz
rule< ScannerT, parser_context<>, parser_tag< eID_expr2 > > expr2
rule< ScannerT, parser_context<>, parser_tag< eID_translocation > > translocation
rule< ScannerT, parser_context<>, parser_tag< eID_fuzzy_pos > > fuzzy_pos
rule< ScannerT, parser_context<>, parser_tag< eID_list1a > > list1a
rule< ScannerT, parser_context<>, parser_tag< eID_prot_missense > > prot_missense
rule< ScannerT, parser_context<>, parser_tag< eID_duplication > > duplication
definition(SGrammar const &)
rule< ScannerT, parser_context<>, parser_tag< eID_mut_list > > mut_list
rule< ScannerT, parser_context<>, parser_tag< eID_deletion > > deletion
rule< ScannerT, parser_context<>, parser_tag< eID_aminoacid > > aminoacid
rule< ScannerT, parser_context<>, parser_tag< eID_seq_id > > seq_id
rule< ScannerT, parser_context<>, parser_tag< eID_list2a > > list2a
rule< ScannerT, parser_context<>, parser_tag< eID_root > > root
rule< ScannerT, parser_context<>, parser_tag< eID_mut_inst > > mut_inst
rule< ScannerT, parser_context<>, parser_tag< eID_expr3 > > expr3
rule< ScannerT, parser_context<>, parser_tag< eID_nuc_range > > nuc_range
rule< ScannerT, parser_context<>, parser_tag< eID_conversion > > conversion
rule< ScannerT, parser_context<>, parser_tag< eID_mol > > mol
rule< ScannerT, parser_context<>, parser_tag< eID_raw_seq > > raw_seq
static CSafeStatic< TRuleNames > s_rule_names
std::map< parser_id, std::string > TRuleNames
static TRuleNames & s_GetRuleNames()
static bool s_is_list(parser_id id)
void Assign(const SOffsetLoc &other)
void Assign(const SOffsetPoint &other)
static CS_CONTEXT * context
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4