어휘 분석기를 구현해야하며 키워드를 저장하기 위해 데이터 구조가 필요합니다. 해시 테이블을 사용하여 키워드를 유지하고 C# 해시 테이블 form System.Collections를 사용하는 것이 좋습니다. 하지만 문제가 있습니다 :이 해시 테이블을 사용하려면 키와 항목이 필요합니다. 키워드 만 있습니다. 키워드를 키 또는 항목으로 사용하거나 둘 다로 사용해야합니까? 키워드가 다르기 때문에 다른 데이터 구조 (예 : 이진 트리)를 사용할 수 있습니까? 제 관심은 컴파일러가이 문제를 어떻게 구현합니까?키는 무엇이며 키워드 해시 테이블의 항목은 무엇입니까?
답변
일반적으로 키워드는 구문 값만 있으므로 대부분의 컴파일러에서는 적절한 문법 규칙을 선택하는 데에만 사용됩니다. 그들의 "가치"는 그 자체로 즉시 소비됩니다. 신원 정보가 유일한 유용한 정보이기 때문에 HashMap
보다 HashSet
을 사용하는 것이 더 적절합니다.
그러나 효과적으로 열거 형을 구성하는 구문 론적으로 동일한 키워드 집합이있을 수 있습니다. 이 경우 열거 형 값은 키워드와 관련된 값일 수 있습니다.
handbuilt 어휘 분석기의 경우 해시 세트 또는 다른 데이터 구조의 사용은 간단하지만 대부분의 컴파일러는 키워드를 다른 어휘 토큰 패턴과 함께 실제로 유한 상태 오토 마톤으로 컴파일합니다. 이렇게하면 외부 데이터 구조없이 어휘 스캔 중에 키워드를 인식 할 수 있습니다.
거의 모든 언어에서 키워드 세트가 고정되어 있으므로 어휘 스캐너에 컴파일 된 효율적인 데이터 구조를 사용하는 것이 가장 적합합니다. 예를 들어, 이진 트리 대신 이진 검색이 가능한 정렬 된 정적 문자열 벡터를 사용하는 것이 타당합니다. 대안으로, 미리 구성된 트라이 (trie)가 사용될 수있다. 이것은 위에서 언급 한 유한 상태 오토 마톤과 거의 동일합니다.
지원해 주셔서 감사합니다. 좋은 하루 되세요! – user2991856
참고 사항 [MSDN : HashSet 클래스] (http://msdn.microsoft.com/en-us/library/bb359438(v=vs.110).aspx) –
xmojmr