나는 들소에서 시프트/줄이기 충돌을 해결하려고합니다. 나는 optional_generics_list과 ctor_arguments 모두 비어있을 수 있음을, 문법옵션 규칙을 추가하려고 할 때 들소에서 시프트/줄이기
new_expr:
T_NEW class_name_reference optional_generics_list ctor_arguments
{ $$ = zend_ast_create(ZEND_AST_NEW, $2, $4, $3); }
| T_NEW anonymous_class
{ $$ = $2; }
optional_generics_list:
/* empty */ { $$ = NULL; }
| generics_list { $$ = $1; }
ctor_arguments:
/* empty */ { $$ = zend_ast_create_list(0, ZEND_AST_ARG_LIST); }
| argument_list { $$ = $1; }
문제는 여기에 사실에있다 규칙에 따라 있습니다. optional_generics_list와 ctor_arguments가 모두 비어 있으면 ctor_arguments가 더 높은 우선 순위를 가져야한다고 지정할 수 있습니까? 또는 내 질문이 정확하지 않을 수 있으며 어떻게이 충돌을 대신 해결할 수 있는지.
일부 업데이트 된 정보 : 파일 · 출력 생성의 어쩌면 출력이 도움이 될 것입니다
State 156 conflicts: 1 shift/reduce
State 156:
303 new_expr: "new (T_NEW)" class_name_reference . optional_generics_list ctor_arguments
'<' shift, and go to state 304
'<' [reduce using rule 168 (optional_generics_list)]
$default reduce using rule 168 (optional_generics_list)
optional_generics_list go to state 305
generics_list go to state 306
State 305
303 new_expr: "new (T_NEW)" class_name_reference optional_generics_list . ctor_arguments
'(' shift, and go to state 229
$default reduce using rule 405 (ctor_arguments)
argument_list go to state 546
ctor_arguments go to state 552
State 306
169 optional_generics_list: generics_list .
$default reduce using rule 169 (optional_generics_list)
'generics_list'와'argument_list'는 같은 모양입니까? 아니면 더 정확하게 말하면 어느 쪽인가의 시작이 될 수있는 터미널이 있습니까? – rici
또는 빈 목록의 우선 순위가 다른 목록보다 높다는 것은 무엇을 의미합니까? 둘 다 비어 있으면 둘 다 비어 있습니다. – rici
generics_list는 '<'기호로 시작할 수 있지만 ctor_arguments는 '('로 시작합니다. 문제는 빈 규칙입니다. 왜냐하면 ctor_arguments 대신 optional_generics_list 및 argument_list 대신 generics_list를 사용하면 모든 것이 제대로 작동하기 때문입니다. –