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