그것은 컴파일러의 나머지해야하지만 파서가 정상적으로 복구 할 수 있도록 Expression
유형으로 더 일반적으로 지정되고 그것을 나무에 보관하십시오.
체크 아웃 this comment from the source을 확인하십시오.
// We allow arbitrary expressions here, even though the grammar only allows string
// literals. We check to ensure that it is only a string literal later in the grammar
// check pass.
파일 내의 모든 텍스트는 해당 트리의 일부 노드에 속해 있습니다. 위와 같은 경우 이라는
Identifier
에 오류를보고하고자합니다.
구문 분석 오류 이후에 구문 분석을 수행 했으므로 표현식이 무엇이든 importSpecifier
이어야합니다. 그렇지 않으면 노드 이이되어야 함을 어떻게 알 수 있습니까? ImportDeclaration
이 소유 한 컨텍스트는 구문 분석 후에 구문 분석 오류를보고해야한다는 것을 알 수 있습니다.
언급했듯이, importSpecifier
의 모든 사용자는 importSpecifier
이 표현 인 좀 더 일반적인 경우를 처리해야합니다. 이것은 분명히 고통스럽고 불행히도 당신에게 큰 해결 방법이 없습니다.
감사합니다. Daniel. 그러나이 설명은 무엇을 설명하지만 왜 그렇게하는지 설명하지 않습니다. 코드를 살펴보면,'import'와'export' 둘 다 그 함수를 사용하기 때문입니다. 어쩌면 그것을 향상시키는 한 가지 방법은 적절한 유형을 반환하는 제네릭 함수로 만드는 것입니다. 왜 'ImportDeclaration.moduleSpecifier'가'StringLiteral'이 아닌지 혼란 스럽기 때문에 다른 사람들이 무엇이 될지 궁금하게 만들고'.text'를 얻기 위해 추가 캐스트를 수행해야합니다. – unional
편집 한 내용이 명확 해 졌습니까? –
나는 본다. 만약'importSpecifier'가'StringLiteral'이라면, 전체 import 문은 해석에 실패하고, 전체 문장은 에러가되는 것입니까? 현재, 우리는'importSpecifier' 표현식으로 오류를 분리하고 스크린 샷 에서처럼 오류를보고 할 수 있습니다. – unional