00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef BRACKET_EXPRESSIONSTART_RANGE_AND_END_RANGE_H
00021 #define BRACKET_EXPRESSIONSTART_RANGE_AND_END_RANGE_H
00022
00023 namespace bracket_expression {
00024
00025 template<typename E>
00026 class start_range_and_end_range
00027 {
00028 grammar_to_parser::basic_non_terminal<E,start_range<E> > m_start_range;
00029 grammar_to_parser::basic_choice<E,collating_choice<E> > m_end_range;
00030
00031 public:
00032 unsigned long recognize( const E* buf, const unsigned long buf_length )
00033 {
00034 if( m_start_range->is_lower_or_equals(buf,buf_length) &&
00035 m_end_range->is_greater_or_equals(buf,buf_length) &&
00036 m_start_range->recognized_size() == m_end_range->recognized_size() )
00037 {
00038 return m_start_range->recognized_size();
00039 }
00040 else
00041 {
00042 return 0;
00043 }
00044 }
00045 start_range_and_end_range();
00046
00047 ~start_range_and_end_range();
00048
00049 };
00050
00051 };
00052
00053 #endif