큰따옴표 "" 문법과 같은 공식 용어가 있나요?
-
29-09-2020 - |
문제
많은 프로그래밍 언어에서 문자열은 토큰입니다.
예를 들어:
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
후행을 수집하기 위해 다른 규칙을 사용하는 파서에 의해 구문 분석됩니다. "
, 두 파서가 동일한 구현으로 끝날 가능성이 높습니다.