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;
83 #define HGVS_THROW(err_code, message) NCBI_THROW(CHgvsParser::CHgvsParserException, err_code, message) 125 returnm_seq_id_resolvers;
144 switch(GetErrCode()) {
145 caseeLogic:
return "eLogic";
146 caseeGrammatic:
return "eGrammatic";
147 caseeSemantic:
return "eSemantic";
148 caseeContext:
return "eContext";
149 caseeAlignment:
return "eAlignment";
150 caseePrecondition:
return "ePrecondition";
151 case eOther:
return "eOther";
177fuzz->Assign(*other.
fuzz);
239pnt->Assign(*other.
pnt);
259, m_seq_id_resolvers(id_resolvers)
292m_placement->SetLoc().SetNull();
305 return!m_placement.IsNull();
419 static const char* s_rule_names[SGrammar::eNodeIds_SIZE];
420 static const strings_GetRuleName(parser_id
id);
422 template<
typenameScannerT>
425rule<ScannerT, parser_context<>, parser_tag<eID_root> >
root;
426rule<ScannerT, parser_context<>, parser_tag<eID_list_delimiter> >
list_delimiter;
427rule<ScannerT, parser_context<>, parser_tag<eID_list1a> >
list1a;
428rule<ScannerT, parser_context<>, parser_tag<eID_list2a> >
list2a;
429rule<ScannerT, parser_context<>, parser_tag<eID_list3a> >
list3a;
430rule<ScannerT, parser_context<>, parser_tag<eID_list1b> >
list1b;
431rule<ScannerT, parser_context<>, parser_tag<eID_list2b> >
list2b;
432rule<ScannerT, parser_context<>, parser_tag<eID_list3b> >
list3b;
433rule<ScannerT, parser_context<>, parser_tag<eID_expr1> >
expr1;
434rule<ScannerT, parser_context<>, parser_tag<eID_expr2> >
expr2;
435rule<ScannerT, parser_context<>, parser_tag<eID_expr3> >
expr3;
436rule<ScannerT, parser_context<>, parser_tag<eID_translocation> >
translocation;
437rule<ScannerT, parser_context<>, parser_tag<eID_header> >
header;
438rule<ScannerT, parser_context<>, parser_tag<eID_seq_id> >
seq_id;
439rule<ScannerT, parser_context<>, parser_tag<eID_mol> >
mol;
440rule<ScannerT, parser_context<>, parser_tag<eID_mut_list > >
mut_list;
441rule<ScannerT, parser_context<>, parser_tag<eID_mut_ref> >
mut_ref;
442rule<ScannerT, parser_context<>, parser_tag<eID_mut_inst> >
mut_inst;
443rule<ScannerT, parser_context<>, parser_tag<eID_int_fuzz> >
int_fuzz;
444rule<ScannerT, parser_context<>, parser_tag<eID_abs_pos> >
abs_pos;
445rule<ScannerT, parser_context<>, parser_tag<eID_general_pos> >
general_pos;
446rule<ScannerT, parser_context<>, parser_tag<eID_fuzzy_pos> >
fuzzy_pos;
447rule<ScannerT, parser_context<>, parser_tag<eID_pos_spec> >
pos_spec;
448rule<ScannerT, parser_context<>, parser_tag<eID_location> >
location;
449rule<ScannerT, parser_context<>, parser_tag<eID_nuc_range> >
nuc_range;
450rule<ScannerT, parser_context<>, parser_tag<eID_prot_range> >
prot_range;
451rule<ScannerT, parser_context<>, parser_tag<eID_raw_seq> >
raw_seq;
452rule<ScannerT, parser_context<>, parser_tag<eID_raw_seq_or_len> >
raw_seq_or_len;
453rule<ScannerT, parser_context<>, parser_tag<eID_aminoacid1> >
aminoacid1;
454rule<ScannerT, parser_context<>, parser_tag<eID_aminoacid2> >
aminoacid2;
455rule<ScannerT, parser_context<>, parser_tag<eID_aminoacid3> >
aminoacid3;
456rule<ScannerT, parser_context<>, parser_tag<eID_nuc_subst> >
nuc_subst;
457rule<ScannerT, parser_context<>, parser_tag<eID_deletion> >
deletion;
458rule<ScannerT, parser_context<>, parser_tag<eID_insertion> >
insertion;
459rule<ScannerT, parser_context<>, parser_tag<eID_delins> >
delins;
460rule<ScannerT, parser_context<>, parser_tag<eID_duplication> >
duplication;
461rule<ScannerT, parser_context<>, parser_tag<eID_nuc_inv> >
nuc_inv;
462rule<ScannerT, parser_context<>, parser_tag<eID_ssr> >
ssr;
463rule<ScannerT, parser_context<>, parser_tag<eID_conversion> >
conversion;
464rule<ScannerT, parser_context<>, parser_tag<eID_seq_loc> >
seq_loc;
465rule<ScannerT, parser_context<>, parser_tag<eID_seq_ref> >
seq_ref;
466rule<ScannerT, parser_context<>, parser_tag<eID_prot_pos> >
prot_pos;
467rule<ScannerT, parser_context<>, parser_tag<eID_prot_missense> >
prot_missense;
468rule<ScannerT, parser_context<>, parser_tag<eID_prot_ext> >
prot_ext;
469rule<ScannerT, parser_context<>, parser_tag<eID_prot_fs> >
prot_fs;
470rule<ScannerT, parser_context<>, parser_tag<eID_no_change> >
no_change;
484aminoacid1 = str_p(
"Ala")
513aminoacid2 = str_p(
"ALA")
542aminoacid3 = chset<>(
"ABCDEFGHIKLMNPQRSTVWXYZU*O");
545raw_seq = leaf_node_d[
549| +chset<>(
"TGKCYSBAWRDMHVN")
550| +chset<>(
"tugkcysbawrdmhvn")];
567int_fuzz = ch_p(
'(') >> (ch_p(
'?')|int_p)
569>> (ch_p(
'?')|int_p)
571| ch_p(
'(') >> int_p >> ch_p(
')')
572| (ch_p(
'?')|int_p);
574abs_pos = !ch_p(
'*') >> int_fuzz;
578general_pos = (str_p(
"IVS") >> int_p | abs_pos) >> sign_p >> int_fuzz
584fuzzy_pos = discard_node_d[ch_p(
'(')]
586>> discard_node_d[ch_p(
'_')]
588>> discard_node_d[ch_p(
')')];
590pos_spec = general_pos
592| !ch_p(
'o') >> header >> pos_spec;
595prot_pos = raw_seq >> pos_spec;
597prot_range = prot_pos >> discard_node_d[ch_p(
'_')] >> prot_pos;
599nuc_range = pos_spec >> discard_node_d[ch_p(
'_')] >> pos_spec;
601 location= nuc_range | pos_spec | prot_range | prot_pos;
607seq_id = leaf_node_d[alnum_p >> *(alnum_p | chset<>(
"._-|"))];
609mol = str_p(
"mt") | chset<>(
"gcnrpm");
613>> !(discard_node_d[ch_p(
'{')]
615>> discard_node_d[ch_p(
'}')])
616>> discard_node_d[ch_p(
':')]
618>> discard_node_d[ch_p(
'.')];
627seq_loc = !ch_p(
'o') >> header >>
location;
629raw_seq_or_len = raw_seq | int_fuzz;
632| (nuc_range|prot_range)
639no_change = !raw_seq >> ch_p(
'=');
641nuc_subst = (!raw_seq) >> ch_p(
'>') >> raw_seq;
646deletion = str_p(
"del") >> !raw_seq_or_len;
648duplication = str_p(
"dup") >> !seq_ref;
650insertion = str_p(
"ins") >> seq_ref;
652conversion = str_p(
"con") >> seq_loc;
654delins = deletion >> insertion;
656nuc_inv = str_p(
"inv") >> !seq_ref;
659(int_fuzz - (ch_p(
'?')|int_p))
660| list_p(discard_node_d[ch_p(
'[')]
662>> discard_node_d[ch_p(
']')],
663discard_node_d[ch_p(
'+')]));
681prot_fs = str_p(
"fs") >> !((str_p(
"Ter") | chset<>(
"*X")) >> !int_p);
685prot_ext = ( str_p(
"extMet")
688| str_p(
"extTer")) >> int_p;
690prot_missense = raw_seq;
693translocation = leaf_node_d[ch_p(
't') >>
696>> *(print_p - ch_p(
'(') - ch_p(
')'))
701mut_inst = ch_p(
'?')
714| leaf_node_d[ch_p(
':') >> +(alnum_p)]
722root = list_p(expr1, chset<>(
"+;"));
728list_delimiter = leaf_node_d[
742expr1 = ch_p(
'(') >> expr1 >> ch_p(
')')
746list1a = list_p(discard_node_d[ch_p(
'[')] >> list1b >> discard_node_d[ch_p(
']')], chset<>(
";+"));
747list1b = list_p(expr1, list_delimiter);
750expr2 = ch_p(
'(') >> expr2 >> ch_p(
')')
758list2a = list_p(discard_node_d[ch_p(
'[')] >> list2b >> discard_node_d[ch_p(
']')], chset<>(
";+"));
759list2b = list_p(expr2, list_delimiter);
762expr3 = ch_p(
'(') >> expr3 >> ch_p(
')')
772list3a = list_p(discard_node_d[ch_p(
'[')] >> list3b >> discard_node_d[ch_p(
']')], chset<>(
";+"));
773list3b = list_p(expr3, list_delimiter);
778rule<ScannerT, parser_context<>, parser_tag<eID_root> >
const&
start()
const 786 return id== SGrammar::eID_list1a
787||
id== SGrammar::eID_list2a
788||
id== SGrammar::eID_list3a
789||
id== SGrammar::eID_root;
794 return id== SGrammar::eID_list1b
795||
id== SGrammar::eID_list2b
796||
id== SGrammar::eID_list3b;
801 returns_is_list_a(
id) || s_is_list_b(
id);
808 typedefTParseTreeMatch::const_tree_iterator
TIterator;
857 static bools_hgvsaa2ncbieaa(
const string& hgvsaa,
string&
out);
858 static bools_hgvs_iupacaa2ncbieaa(
const string& hgvsaa,
string&
out);
859 static bools_hgvsaa2ncbieaa(
const string& hgvsaa,
booluplow,
string&
out);
878 static strings_IntWithFuzzToStr(
longpos,
const TSeqPos* ref_pos,
boolwith_sign,
const CInt_fuzz* fuzz);
881 static strings_OffsetPointToString(
886 const long* offset_pos,
907 stringx_AsHgvsInstExpression(
915 stringx_AsHgvsExpression(
921 stringx_LocToSeqStr(
constCSeq_loc& loc);
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
namespace ncbi::objects::
Resolve CCDS-id to an NM.
Resolve LRG seq-ids, e.g. LRG_123, LRG_123t1, LRG_123p1.
A helper class to convert a string to a seq-id.
list< CRef< CSeq_id_Resolver > > TResolvers
static CSeq_id_Handle s_Get(TResolvers &resolvers, const string &s)
Iterate through resolvers and resolve using the first one that can do it Return empty handle otherwis...
Set of related Variations.
CContext(CRef< CScope > scope, CSeq_id_Resolver::TResolvers &id_resolvers, const string &hgvs)
CSeq_id_Handle ResolevSeqId(const string &s) const
bool IsSetPlacement() const
CVariantPlacement & SetPlacement()
const CVariantPlacement & GetPlacement() const
CSeq_id_Resolver::TResolvers m_seq_id_resolvers
CRef< CVariantPlacement > m_placement
CScope & GetScope() const
const string & GetHgvs() const
const CBioseq_Handle & GetBioseqHandle() const
NCBI_EXCEPTION_DEFAULT(CHgvsParserException, CException)
virtual const char * GetErrCodeString(void) const override
Get error code interpreted as text.
@ eLogic
Problem with the code.
@ eSemantic
Expression is invalid in some way.
@ eContext
Some problem with context.
@ eAlignment
Some problem with getting alignment.
@ ePrecondition
Precondition is not met.
@ eGrammatic
Expression is not a valid language.
TParseTreeMatch::const_tree_iterator TIterator
CSeq_id_Resolver::TResolvers m_seq_id_resolvers
CVariation_inst::TDelta::value_type TDelta
static CSafeStatic< SGrammar > s_grammar
CVariation::TData::TSet TVariationSet
CSeq_id_Resolver::TResolvers & SetSeq_id_Resolvers()
In order of decreasing priority.
CHgvsParser(CScope &scope, int tax_id=9606)
tree_match< char const * > TParseTreeMatch
static string s_hgvsUCaa2hgvsUL(const string &hgvsaa)
Convert non-HGVS compliant all-uppercase AAs to UpLow, e.g. ILECYS ->IleCys.
Include a standard set of the NCBI C++ Toolkit most basic headers.
std::ofstream out("events_result.xml")
main entry point for tests
static const char location[]
unsigned int TSeqPos
Type for sequence locations and lengths.
int TSignedSeqPos
Type for signed sequence position.
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,...
#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.
@ eLim_other
something else
virtual void Reset(void)
Reset the whole object.
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.
void Assign(const SFuzzyInt &other)
rule< ScannerT, parser_context<>, parser_tag< eID_list2a > > list2a
rule< ScannerT, parser_context<>, parser_tag< eID_aminoacid3 > > aminoacid3
rule< ScannerT, parser_context<>, parser_tag< eID_fuzzy_pos > > fuzzy_pos
rule< ScannerT, parser_context<>, parser_tag< eID_mol > > mol
rule< ScannerT, parser_context<>, parser_tag< eID_list_delimiter > > list_delimiter
rule< ScannerT, parser_context<>, parser_tag< eID_list3a > > list3a
rule< ScannerT, parser_context<>, parser_tag< eID_location > > location
rule< ScannerT, parser_context<>, parser_tag< eID_nuc_subst > > nuc_subst
rule< ScannerT, parser_context<>, parser_tag< eID_mut_inst > > mut_inst
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_nuc_inv > > nuc_inv
rule< ScannerT, parser_context<>, parser_tag< eID_insertion > > insertion
rule< ScannerT, parser_context<>, parser_tag< eID_conversion > > conversion
rule< ScannerT, parser_context<>, parser_tag< eID_duplication > > duplication
rule< ScannerT, parser_context<>, parser_tag< eID_aminoacid2 > > aminoacid2
rule< ScannerT, parser_context<>, parser_tag< eID_prot_ext > > prot_ext
rule< ScannerT, parser_context<>, parser_tag< eID_list1a > > list1a
rule< ScannerT, parser_context<>, parser_tag< eID_nuc_range > > nuc_range
rule< ScannerT, parser_context<>, parser_tag< eID_delins > > delins
rule< ScannerT, parser_context<>, parser_tag< eID_prot_pos > > prot_pos
rule< ScannerT, parser_context<>, parser_tag< eID_deletion > > deletion
rule< ScannerT, parser_context<>, parser_tag< eID_abs_pos > > abs_pos
rule< ScannerT, parser_context<>, parser_tag< eID_mut_ref > > mut_ref
rule< ScannerT, parser_context<>, parser_tag< eID_translocation > > translocation
rule< ScannerT, parser_context<>, parser_tag< eID_ssr > > ssr
rule< ScannerT, parser_context<>, parser_tag< eID_prot_fs > > prot_fs
rule< ScannerT, parser_context<>, parser_tag< eID_expr1 > > expr1
rule< ScannerT, parser_context<>, parser_tag< eID_general_pos > > general_pos
rule< ScannerT, parser_context<>, parser_tag< eID_raw_seq_or_len > > raw_seq_or_len
rule< ScannerT, parser_context<>, parser_tag< eID_seq_loc > > seq_loc
rule< ScannerT, parser_context<>, parser_tag< eID_mut_list > > mut_list
rule< ScannerT, parser_context<>, parser_tag< eID_expr3 > > expr3
rule< ScannerT, parser_context<>, parser_tag< eID_list3b > > list3b
rule< ScannerT, parser_context<>, parser_tag< eID_prot_range > > prot_range
rule< ScannerT, parser_context<>, parser_tag< eID_no_change > > no_change
rule< ScannerT, parser_context<>, parser_tag< eID_expr2 > > expr2
rule< ScannerT, parser_context<>, parser_tag< eID_header > > header
rule< ScannerT, parser_context<>, parser_tag< eID_seq_id > > seq_id
rule< ScannerT, parser_context<>, parser_tag< eID_prot_missense > > prot_missense
rule< ScannerT, parser_context<>, parser_tag< eID_pos_spec > > pos_spec
rule< ScannerT, parser_context<>, parser_tag< eID_aminoacid1 > > aminoacid1
rule< ScannerT, parser_context<>, parser_tag< eID_raw_seq > > raw_seq
rule< ScannerT, parser_context<>, parser_tag< eID_root > > const & start() const
rule< ScannerT, parser_context<>, parser_tag< eID_seq_ref > > seq_ref
rule< ScannerT, parser_context<>, parser_tag< eID_root > > root
definition(SGrammar const &)
rule< ScannerT, parser_context<>, parser_tag< eID_list2b > > list2b
static bool s_is_list(parser_id id)
static bool s_is_list_a(parser_id id)
static bool s_is_list_b(parser_id id)
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