문제

많은 프로그래밍 언어에서 문자열은 토큰입니다.

예를 들어:

 token               ::= '"' string
                       | digit nat

 string              ::= char string
                       | '"'

 nat                 ::= digit nat
                       | ϵ

이것은 일부 프로그래밍 언어의 토큰 문법에 대한 LL(1) 문법입니다.

구문 분석할 때 string, 후속 세트를 확인할 필요가 없습니다. " 각각의 끝에 string.

비교 nat, string 분석하기가 더 쉽습니다.

내 질문은

이런 종류의 문법에 대한 공식 용어가 있나요?

감사해요.


편집:

원래 문법에 약간의 실수가 있었습니다. 제 실수를 지적해 주신 @rici에게 감사드립니다.

도움이 되었습니까?

해결책

FOLLLOW 세트는 둘 중 하나의 구문 분석에 사용되지 않습니다. string 또는 nat.두 경우 모두 파서는 입력이 유효한 기호 집합에 있는지 확인하기만 하면 됩니다.의 경우 nat, 유효한 기호는 숫자입니다.의 경우 string, 이외의 문자입니다. ".(실제 언어에서는 파서가 다음 사항도 확인합니다. \).그러나 두 경우 모두 확인이 필요하며 한 테스트가 다른 테스트보다 "간단하다"고 말하는 좋은 기준은 없습니다.(실제로 두 검사 모두 간단한 테이블 조회일 가능성이 높습니다.따라서 O(1)입니다.)

FOLLOW 세트는 문법에 ε 생성이 포함된 경우에만 필요합니다.그럼에도 불구하고 파서의 작업은 복잡하지 않습니다.더 복잡한 것은 파서를 구축하는 것인데, 이는 한 번만 발생합니다.그다지 큰 문제는 아니지만 "ε-자유 문법"이 중요하다는 점은 충분히 주목할 만합니다.나는 명시적으로 종료되는 반복과 암시적으로 종료되는 반복의 차이를 설명하는 공통 어휘가 없다고 생각하며, 어떤 방식으로든 그 구별을 엄격하게 정의하기가 매우 어려울 것입니다.당신의 string 후행을 수집하기 위해 다른 규칙을 사용하는 파서에 의해 구문 분석됩니다. ", 두 파서가 동일한 구현으로 끝날 가능성이 높습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top