00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef BRACKET_EXPRESSIONEXPRESSION_TERM_H
00021 #define BRACKET_EXPRESSIONEXPRESSION_TERM_H
00022
00023 namespace bracket_expression {
00024
00025 template<typename E>
00026 class expression_term
00027 {
00028 typedef typename grammar_to_parser::basic_parser<E>::parser_list parser_list;
00029 grammar_to_parser::basic_choice<E,single_expression<E> >
00030 m_single_expression;
00031 grammar_to_parser::basic_choice<E,range_expression<E> >
00032 m_range_expression;
00033
00034 public:
00035 unsigned long recognize( const E* buf, const unsigned long buf_length )
00036 {
00037 if( m_single_expression.is_parsed() )
00038 {
00039 return m_single_expression->recognize(buf,buf_length);
00040 }
00041 else
00042 {
00043 return m_range_expression->recognize(buf,buf_length);
00044 }
00045 }
00046 public:
00047 expression_term() {};
00048
00049 ~expression_term() {};
00050 void push_parsers( parser_list &l )
00051 {
00052 l.push_back( &m_range_expression );
00053 l.push_back( &m_single_expression );
00054 }
00055
00056 };
00057
00058 };
00059
00060 #endif