4
내 동료 폴스는 다음 나에게 물었다 :PEG (Grako)가 부족한 선택 품목을 파싱 하시겠습니까? 그리고 사양이 구조가 유사하다 그것의 규칙이있다 - 나는 기존의 언어 (AN IEEE 표준의 SystemVerilog)에 대한 파서를 쓰고 있어요</p> <hr> <p>:
cover_point
=
[[data_type] identifier ':' ] 'coverpoint' identifier ';'
;
data_type
=
'int' | 'float' | identifier
;
identifier
=
?/\w+/?
;
문제는 그 다음 법적 문자열을 구문 분석 할 때 :
anIdentifier: coverpoint another_identifier;
anIdentifier
matche을 (해당 식별자 옵션을 통해) data_type
을 성공적으로 사용했습니다. 이는 Grako가 그 다음에 다른 식별자를 찾고 실패했음을 의미합니다. 그런 다음 data_type 부분없이 구문 분석을 시도하지 않습니다. 다음과 같이 내가 규칙을 다시 쓸 수
cover_point_rewrite
=
[data_type identifier ':' | identifier ':' ] 'coverpoint' identifier ';'
;
하지만 난 궁금 :
- 이 의도적이고 더 나은 구문이 있다면
- ?
이는 PEG-에서 총장 문제, 또는 도구 (Grako) 하나인가?
개인적으로는 PEG 파서가 가능한 한 가장 긴 옵션을 선택하도록 문법을 조정해야합니다. – Apalala