@@ -841,7 +841,7 @@ def handle_repetitions(min_times: int, max_times: int) -> None:
841
841
raise RuntimeError ("expecting preceding item to */+/?/{ at " + str (pos ))
842
842
843
843
844
- previous_elements = out_elements [last_sym_start :]
844
+ previous_elements : std . vector [ LlamaGrammarElement ] = out_elements [last_sym_start :out_elements . size () ]
845
845
846
846
if min_times == 0 :
847
847
out_elements .resize (last_sym_start )
@@ -859,12 +859,12 @@ def handle_repetitions(min_times: int, max_times: int) -> None:
859
859
rec_rule .resize (len (previous_elements ))
860
860
rec_rule_id = generate_symbol_id (state , rule_name ) # type: int
861
861
if i > 0 or max_times < 0 :
862
- rec_rule .push_back (LlamaGrammarElement (llama_gretype .LLAMA_GRETYPE_RULE_REF , rec_rule_id ))
862
+ rec_rule .push_back (LlamaGrammarElement (llama_gretype .LLAMA_GRETYPE_RULE_REF , rec_rule_id if max_times < 0 else last_rec_rule_id ))
863
863
rec_rule .push_back (LlamaGrammarElement (llama_gretype .LLAMA_GRETYPE_ALT , 0 ))
864
864
rec_rule .push_back (LlamaGrammarElement (llama_gretype .LLAMA_GRETYPE_END , 0 ))
865
865
add_rule (state , rec_rule_id , rec_rule )
866
-
867
866
last_rec_rule_id = rec_rule_id
867
+
868
868
if n_opt > 0 :
869
869
out_elements .push_back (LlamaGrammarElement (llama_gretype .LLAMA_GRETYPE_RULE_REF , last_rec_rule_id ))
870
870
@@ -1058,6 +1058,7 @@ def handle_repetitions(min_times: int, max_times: int) -> None:
1058
1058
max_times = min_times
1059
1059
pos = parse_space (pos + 1 , is_nested )
1060
1060
elif pos [0 ] == "," :
1061
+
1061
1062
pos = parse_space (pos + 1 , is_nested )
1062
1063
if is_digit_char (pos [0 ]):
1063
1064
int_end = parse_int (pos )
@@ -1281,6 +1282,7 @@ def print_rule(
1281
1282
# break;
1282
1283
# }
1283
1284
1285
+
1284
1286
for i , elem in enumerate (rule [:- 1 ]):
1285
1287
case = elem .type # type: llama_gretype
1286
1288
if case is llama_gretype .LLAMA_GRETYPE_END :
0 commit comments