77#include  < cstddef> 
88#include  < cstdint> 
99#include  < cstring> 
10- #include  < set> 
1110#include  < stack> 
1211#include  < unordered_set> 
1312#include  < variant> 
1413#include  < vector> 
1514
1615#include  " fsm.h" 
17- #include  " grammar_data_structure.h" 
1816#include  " support/logging.h" 
1917#include  " support/utils.h" 
2018
@@ -129,7 +127,7 @@ class RegexIR {
129127
130128Result<std::pair<int , int >> RegexIR::CheckRepeat (const  std::string& regex, int & start) {
131129  if  (regex[start] != ' {' 
132-     return  Result<std::pair< int ,  int >>:: Err (" Invalid repeat format1" 
130+     return  ResultErr (" Invalid repeat format1" 
133131  }
134132  int  lower_bound = 0 ;
135133  int  upper_bound = RegexIR::kRepeatNoUpperBound ;
@@ -144,7 +142,7 @@ Result<std::pair<int, int>> RegexIR::CheckRepeat(const std::string& regex, int&
144142    start++;
145143  }
146144  if  (num_str.empty ()) {
147-     return  Result<std::pair< int ,  int >>:: Err (" Invalid repeat format2" 
145+     return  ResultErr (" Invalid repeat format2" 
148146  }
149147  lower_bound = std::stoi (num_str);
150148  while  (static_cast <size_t >(start) < regex.size () && regex[start] == '  ' 
@@ -153,10 +151,10 @@ Result<std::pair<int, int>> RegexIR::CheckRepeat(const std::string& regex, int&
153151  //  The format is {n}
154152  if  (regex[start] == ' }' 
155153    upper_bound = lower_bound;
156-     return  Result<std::pair< int ,  int >>:: Ok (std::make_pair (lower_bound, upper_bound));
154+     return  ResultOk (std::make_pair (lower_bound, upper_bound));
157155  }
158156  if  (regex[start] != ' ,' 
159-     return  Result<std::pair< int ,  int >>:: Err (" Invalid repeat format3" 
157+     return  ResultErr (" Invalid repeat format3" 
160158  }
161159  XGRAMMAR_DCHECK (regex[start] == ' ,' 
162160  start++;
@@ -165,32 +163,32 @@ Result<std::pair<int, int>> RegexIR::CheckRepeat(const std::string& regex, int&
165163  }
166164  //  The format is {n,}
167165  if  (regex[start] == ' }' 
168-     return  Result<std::pair< int ,  int >>:: Ok (std::make_pair (lower_bound, upper_bound));
166+     return  ResultOk (std::make_pair (lower_bound, upper_bound));
169167  }
170168  num_str.clear ();
171169  while  (static_cast <size_t >(start) < regex.size () && std::isdigit (regex[start])) {
172170    num_str += regex[start];
173171    start++;
174172  }
175173  if  (num_str.empty ()) {
176-     return  Result<std::pair< int ,  int >>:: Err (" Invalid repeat format4" 
174+     return  ResultErr (" Invalid repeat format4" 
177175  }
178176  upper_bound = std::stoi (num_str);
179177  while  (static_cast <size_t >(start) < regex.size () && regex[start] == '  ' 
180178    start++;
181179  }
182180  if  (regex[start] != ' }' 
183-     return  Result<std::pair< int ,  int >>:: Err (" Invalid repeat format5" 
181+     return  ResultErr (" Invalid repeat format5" 
184182  }
185183  XGRAMMAR_DCHECK (regex[start] == ' }' 
186-   return  Result<std::pair< int ,  int >>:: Ok (std::make_pair (lower_bound, upper_bound));
184+   return  ResultOk (std::make_pair (lower_bound, upper_bound));
187185}
188186
189187Result<FSMWithStartEnd> RegexIR::Build () const  {
190188  if  (states.empty ()) {
191189    FSM empty_fsm (1 );
192190    FSMWithStartEnd result (empty_fsm, 0 , std::unordered_set<int >{0 }, false );
193-     return  Result<FSMWithStartEnd>:: Ok (std::move (result));
191+     return  ResultOk (std::move (result));
194192  }
195193  std::vector<FSMWithStartEnd> fsm_list;
196194  for  (const  auto & state : states) {
@@ -201,16 +199,16 @@ Result<FSMWithStartEnd> RegexIR::Build() const {
201199    fsm_list.push_back (std::move (visited).Unwrap ());
202200  }
203201  if  (fsm_list.size () > 1 ) {
204-     return  Result<FSMWithStartEnd>:: Ok (FSMWithStartEnd::Concat (fsm_list));
202+     return  ResultOk (FSMWithStartEnd::Concat (fsm_list));
205203  } else  {
206204    //  If there is only one FSM, return it directly.
207-     return  Result<FSMWithStartEnd>:: Ok (std::move (fsm_list[0 ]));
205+     return  ResultOk (std::move (fsm_list[0 ]));
208206  }
209207}
210208
211209Result<FSMWithStartEnd> RegexIR::visit (const  RegexIR::Leaf& state) const  {
212210  FSMWithStartEnd result = BuildLeafFSMFromRegex (state.regex );
213-   return  Result<FSMWithStartEnd>:: Ok (std::move (result));
211+   return  ResultOk (std::move (result));
214212}
215213
216214Result<FSMWithStartEnd> RegexIR::visit (const  RegexIR::Union& state) const  {
@@ -223,14 +221,14 @@ Result<FSMWithStartEnd> RegexIR::visit(const RegexIR::Union& state) const {
223221    fsm_list.push_back (std::move (visited).Unwrap ());
224222  }
225223  if  (fsm_list.size () <= 1 ) {
226-     return  Result<FSMWithStartEnd>:: Err (" Invalid union" 
224+     return  ResultErr (" Invalid union" 
227225  }
228-   return  Result<FSMWithStartEnd>:: Ok (FSMWithStartEnd::Union (fsm_list));
226+   return  ResultOk (FSMWithStartEnd::Union (fsm_list));
229227}
230228
231229Result<FSMWithStartEnd> RegexIR::visit (const  RegexIR::Symbol& state) const  {
232230  if  (state.state .size () != 1 ) {
233-     return  Result<FSMWithStartEnd>:: Err (" Invalid symbol" 
231+     return  ResultErr (" Invalid symbol" 
234232  }
235233  Result<FSMWithStartEnd> child_result =
236234      std::visit ([&](auto && arg) { return  RegexIR::visit (arg); }, state.state [0 ]);
@@ -241,13 +239,13 @@ Result<FSMWithStartEnd> RegexIR::visit(const RegexIR::Symbol& state) const {
241239
242240  switch  (state.symbol ) {
243241    case  RegexIR::RegexSymbol::plus: {
244-       return  Result<FSMWithStartEnd>:: Ok (child.Plus ());
242+       return  ResultOk (child.Plus ());
245243    }
246244    case  RegexIR::RegexSymbol::star: {
247-       return  Result<FSMWithStartEnd>:: Ok (child.Star ());
245+       return  ResultOk (child.Star ());
248246    }
249247    case  RegexIR::RegexSymbol::optional: {
250-       return  Result<FSMWithStartEnd>:: Ok (child.Optional ());
248+       return  ResultOk (child.Optional ());
251249    }
252250    default : {
253251      XGRAMMAR_LOG (FATAL) << " Unknown regex symbol: " static_cast <int >(state.symbol );
@@ -265,14 +263,14 @@ Result<FSMWithStartEnd> RegexIR::visit(const RegexIR::Bracket& state) const {
265263    fsm_list.push_back (std::move (visited).Unwrap ());
266264  }
267265  if  (fsm_list.empty ()) {
268-     return  Result<FSMWithStartEnd>:: Err (" Invalid bracket" 
266+     return  ResultErr (" Invalid bracket" 
269267  }
270-   return  Result<FSMWithStartEnd>:: Ok (FSMWithStartEnd::Concat (fsm_list));
268+   return  ResultOk (FSMWithStartEnd::Concat (fsm_list));
271269}
272270
273271Result<FSMWithStartEnd> RegexIR::visit (const  RegexIR::Repeat& state) const  {
274272  if  (state.states .size () != 1 ) {
275-     return  Result<FSMWithStartEnd>:: Err (" Invalid repeat" 
273+     return  ResultErr (" Invalid repeat" 
276274  }
277275  Result<FSMWithStartEnd> child_result =
278276      std::visit ([&](auto && arg) { return  RegexIR::visit (arg); }, state.states [0 ]);
@@ -298,7 +296,7 @@ Result<FSMWithStartEnd> RegexIR::visit(const RegexIR::Repeat& state) const {
298296    for  (const  auto & end : result.GetEnds ()) {
299297      result->AddEpsilonEdge (end, end_state_of_lower_bound_fsm);
300298    }
301-     return  Result<FSMWithStartEnd>:: Ok (std::move (result));
299+     return  ResultOk (std::move (result));
302300  }
303301  //  Handling {n, m} or {n}
304302  for  (int  i = 2 ; i <= state.upper_bound ; i++) {
@@ -312,7 +310,7 @@ Result<FSMWithStartEnd> RegexIR::visit(const RegexIR::Repeat& state) const {
312310  for  (const  auto & end : new_ends) {
313311    result.AddEndState (end);
314312  }
315-   return  Result<FSMWithStartEnd>:: Ok (std::move (result));
313+   return  ResultOk (std::move (result));
316314}
317315
318316FSMWithStartEnd RegexIR::BuildLeafFSMFromRegex (const  std::string& regex) {
@@ -550,14 +548,14 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
550548    //  Handle The class.
551549    if  (regex[i] == ' [' 
552550      if  (left_middle_bracket != -1 ) {
553-         return  Result<FSMWithStartEnd>:: Err (" Nested middle bracket!" 
551+         return  ResultErr (" Nested middle bracket!" 
554552      }
555553      left_middle_bracket = i;
556554      continue ;
557555    }
558556    if  (regex[i] == ' ]' 
559557      if  (left_middle_bracket == -1 ) {
560-         return  Result<FSMWithStartEnd>:: Err (" Invalid middle bracket!" 
558+         return  ResultErr (" Invalid middle bracket!" 
561559      }
562560      RegexIR::Leaf leaf;
563561      leaf.regex  = regex.substr (left_middle_bracket, i - left_middle_bracket + 1 );
@@ -573,11 +571,11 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
573571    }
574572    if  (regex[i] == ' +' ' *' ' ?' 
575573      if  (stack.empty ()) {
576-         return  Result<FSMWithStartEnd>:: Err (" Invalid regex: no state before operator!" 
574+         return  ResultErr (" Invalid regex: no state before operator!" 
577575      }
578576      auto  state = stack.top ();
579577      if  (std::holds_alternative<char >(state)) {
580-         return  Result<FSMWithStartEnd>:: Err (" Invalid regex: no state before operator!" 
578+         return  ResultErr (" Invalid regex: no state before operator!" 
581579      }
582580      stack.pop ();
583581      auto  child = std::get<RegexIR::State>(state);
@@ -637,9 +635,7 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
637635        }
638636      }
639637      if  (!paired) {
640-         return  Result<FSMWithStartEnd>::Err (
641-             " Invalid regex: no paired bracket!" std::to_string (__LINE__)
642-         );
638+         return  ResultErr (" Invalid regex: no paired bracket!" std::to_string (__LINE__));
643639      }
644640      if  (states.empty ()) {
645641        continue ;
@@ -666,18 +662,14 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
666662              bracket.states .clear ();
667663              continue ;
668664            }
669-             return  Result<FSMWithStartEnd>::Err (
670-                 " Invalid regex: no paired bracket!" std::to_string (__LINE__)
671-             );
665+             return  ResultErr (" Invalid regex: no paired bracket!" std::to_string (__LINE__));
672666          }
673667          if  (std::holds_alternative<RegexIR::State>(state)) {
674668            auto  child = std::get<RegexIR::State>(state);
675669            bracket.states .push_back (child);
676670            continue ;
677671          }
678-           return  Result<FSMWithStartEnd>::Err (
679-               " Invalid regex: no paired bracket!" std::to_string (__LINE__)
680-           );
672+           return  ResultErr (" Invalid regex: no paired bracket!" std::to_string (__LINE__));
681673        }
682674        union_state.states .push_back (bracket);
683675        stack.push (union_state);
@@ -686,16 +678,16 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
686678    }
687679    if  (regex[i] == ' {' 
688680      if  (stack.empty ()) {
689-         return  Result<FSMWithStartEnd>:: Err (" Invalid regex: no state before repeat!" 
681+         return  ResultErr (" Invalid regex: no state before repeat!" 
690682      }
691683      auto  state = stack.top ();
692684      if  (std::holds_alternative<char >(state)) {
693-         return  Result<FSMWithStartEnd>:: Err (" Invalid regex: no state before repeat!" 
685+         return  ResultErr (" Invalid regex: no state before repeat!" 
694686      }
695687      stack.pop ();
696688      auto  bounds_result = RegexIR::CheckRepeat (regex, i);
697689      if  (bounds_result.IsErr ()) {
698-         return  Result<FSMWithStartEnd>:: Err (std::move (bounds_result).UnwrapErr ());
690+         return  ResultErr (std::move (bounds_result).UnwrapErr ());
699691      }
700692      auto  bounds = std::move (bounds_result).Unwrap ();
701693      auto  child = std::get<RegexIR::State>(state);
@@ -729,7 +721,7 @@ Result<FSMWithStartEnd> RegexFSMBuilder::Build(const std::string& regex) {
729721        stack.pop ();
730722        continue ;
731723      }
732-       return  Result<FSMWithStartEnd>:: Err (" Invalid regex: no paired!" 
724+       return  ResultErr (" Invalid regex: no paired!" 
733725    }
734726    auto  state = stack.top ();
735727    stack.pop ();
0 commit comments