2010-11-27 5 views

답변

2

입니다

<expression> & <expression> 

또는 '<expression>'이 리터럴 정수 또는 간단한 변수 이름으로 끝나는 유사한 구조.

이것은 어휘 분석기에 의미 론적 피드백을 요구할 수 있습니다. int (이 예에서)은 일반적인 식별자가 아닌 유형 이름 (키워드)임을 인식 할 수 있어야합니다. typedef 이름을 사용하여 유형으로도 처리 할 수 ​​있습니다. 그러나 typedef 이름은 일반적으로 범위가 지정됩니다.

+0

사실 이러한 종류의 피드백을 렉서에게 줄 수 있습니까? 나는 #define과 같은 상태를 구현할 수 있었고 주석을 넣을 때 상태를 바꿀 수 있었지만 flex-> flex가 아닌 bison-> flex –

+0

@ acidzombie24 : 피드백의 종류를 받아들이도록 어휘 분석기를 설계했다면, 그렇다. –

+0

그럼 플렉스에 대해 말하지 않습니까? 흥미있다 –

0

"lexed"에 따라 & 리터럴의 다른 토큰을 반환하도록 flex에 지시 할 수 있습니다. 그래서 당신은 두 가지 규칙으로 끝낼 : 새로운 언어가 사용자 정의 형식을 지원하는 경우 그냥 <type> 또는 <identifier>을 발견했는지 여부를

<type> T_AMPERSAND <identifier> 

<expression> T_LOGIC_AND <expression> 

는, 렉서는 알 수 없습니다, 그래도. 이 경우 <type> '&' <identifier>이 유효한 독립 실행 형 문으로 간주되는 반면 <expression> '&' <expression>은 직사각형 (할당 오른쪽 오른쪽)으로 만 표시 될 수 있습니다.