파서 (또는 컴파일러)는 일반적으로 입력이되는 알파벳의 일련의 기호에서 특정 토큰 유형을 인식하는 토크 나이저로 구성됩니다.문법, 스택, 터미널 기호 및 토큰
Google 파서 만 토큰 스트림을 읽습니다. 원시 문자가 아닙니다.
그러나 문법적 계층에서는 터미널 및 비 터미널이 있습니다. 그러나 토큰은 아닙니다.
즉, 문법과 스택 (우리가 LL (k) 또는 LR 패밀리 파서를 사용한다고 가정하자)은 터미널과 비 터미널로 구성됩니다. 그러나 문법적인 관점에서 말하면, 말단 기호에 대한 토큰 유형도 마찬가지로 사용하는 것이 합리적이라고 가정 해 봅시다.
문법 기호 (터미널)를 나타내는 방법 및 일반적으로 "입력 된"터미널이 있습니까?
제 생각에는 인터페이스의 다중 상속이 될 것입니다. 그러나 인터페이스가 실제로 의미가 없도록 하나의 클래스 TokenType 만 있습니다. IGrammarSymbol을 사용하면 터미널 및 비 터미널 (Terminter and Nonterminal) 클래스를 두 개 이상 가질 수 있습니다.이 클래스는 해당 인터페이스를 구현할 수 있습니다.
감사합니다 당신
So 문법이 IDENTIFIER 타입이나 NUMBER 타입의 터미널을 파생시킬 때 이것은 실제로 여러개의 어휘가 될 수 있지만 더 이상 구문에 속하지 않지만 이미 의미론에 속해 있습니까? –
@vonspotz : NUMBER를 구성하는 문자 스트링을 실제 숫자로 변환 할 때 의미론입니다. 문법은 '3'과 '42'를 구분하지 않지만 분명히 의미 적 차이가 있습니다. – rici
예, 그 시점에서 확인하십시오. 파서가 읽어야하는 기호가 'NUMBER'유형이어야한다는 문법을 지정했다면? 국제 대회는 무엇입니까? RHS는 '클래스 터미널'또는 '클래스 토큰'에 의해 내부적으로 표현되는 다음 규칙 중 '비 터미널 인 합'을 제외하고 있습니까? 합계 : =<'+'> | Sum <'+'> –