1 #ifndef __HGVS_NUCLEIC_ACID_PARSER_HPP__ 2 #define __HGVS_NUCLEIC_ACID_PARSER_HPP__ 3 4 #include <corelib/ncbiobj.hpp> 5 #include <corelib/ncbistd.hpp> 6 #include <objtools/readers/hgvs/hgvs_lexer.hpp> 7 #include <boost/spirit/include/qi.hpp> 8 #include <objtools/readers/hgvs/hgvs_parser_common.hpp> 9 #include <objects/varrep/varrep__.hpp> 10 11 BEGIN_NCBI_SCOPE 12 BEGIN_SCOPE(objects) 13 14 using TParseIterator = SHgvsLexer::iterator_type; 15 16 struct SHgvsNucleicAcidGrammar : boost::spirit::qi::grammar<TParseIterator, CRef<CSimpleVariant>()> 17 { 18 SHgvsNucleicAcidGrammar(const SHgvsLexer& tok); 19 20 using TTerminal = boost::spirit::qi::rule<TParseIterator, std::string()>; 21 template<typename T> using TRule = boost::spirit::qi::rule<TParseIterator, CRef<T>()>; 22 23 TRule<CSimpleVariant> simple_dna_variation; 24 TRule<CSimpleVariant> fuzzy_simple_variation; 25 TRule<CSimpleVariant> confirmed_simple_variation; 26 TRule<CSimpleVariant> sub; 27 TRule<CSimpleVariant> dup; 28 TRule<CSimpleVariant> delins; 29 TRule<CSimpleVariant> del; 30 TRule<CSimpleVariant> ins; 31 TRule<CSimpleVariant> conv; 32 TRule<CSimpleVariant> inv; 33 TRule<CSimpleVariant> ssr; 34 TRule<CSimpleVariant> identity; 35 TRule<CNtLocation> remote_nucleotide_interval; 36 TRule<CNtLocation> nucleotide_location; 37 TRule<CNtLocation> nucleotide_site_interval; 38 TRule<CNtLocation> nucleotide_site; 39 TRule<CNtLocation> nucleotide_site_range; 40 TRule<CNtSite> nucleotide_uncertain_site; 41 TRule<CNtSite> nucleotide_single_site; 42 TRule<CNtSite> simple_coding_site; 43 TRule<CNtSite> pretranslation_site; 44 TRule<CNtSite> posttranslation_site; 45 TRule<CNtSite> intron_site; 46 TRule<CNtSite> simple_site; 47 TTerminal intron_offset; 48 TTerminal offset_length; 49 TTerminal nucleotide_seq; 50 TTerminal nucleotide; 51 TRule<CCount> count_range; 52 TRule<CCount> count; 53 TRule<CCount> fuzzy_count; 54 TTerminal val_or_unknown; 55 TTerminal nn_int; 56 }; 57 58 END_SCOPE(objects) 59 END_NCBI_SCOPE 60 61 62 #endif // _HGVS_NUCLEIC_ACID_PARSER_HPP_ 63