당신이 C++과 같은 언어를 쓰고 있고 참조를 허용한다고합시다.bison : Varname & Varname 줄이기/줄이기 문제는 어떻게 해결하나요?
또한 bitwise를 허용합니다.
7&5
축소/축소 충돌은 어떻게 해결합니까? 나는 glr-parser를 사용하는 것을 의미하지 않지만 충돌은 전혀 없다. 구문 문제의 예는
var&var //could be type& var or logical val & val
입니다.
당신이 C++과 같은 언어를 쓰고 있고 참조를 허용한다고합시다.bison : Varname & Varname 줄이기/줄이기 문제는 어떻게 해결하나요?
또한 bitwise를 허용합니다.
7&5
축소/축소 충돌은 어떻게 해결합니까? 나는 glr-parser를 사용하는 것을 의미하지 않지만 충돌은 전혀 없다. 구문 문제의 예는
var&var //could be type& var or logical val & val
입니다.
입니다
<expression> & <expression>
또는 '<expression>
'이 리터럴 정수 또는 간단한 변수 이름으로 끝나는 유사한 구조.
이것은 어휘 분석기에 의미 론적 피드백을 요구할 수 있습니다. int
(이 예에서)은 일반적인 식별자가 아닌 유형 이름 (키워드)임을 인식 할 수 있어야합니다. typedef 이름을 사용하여 유형으로도 처리 할 수 있습니다. 그러나 typedef 이름은 일반적으로 범위가 지정됩니다.
"lexed"에 따라 &
리터럴의 다른 토큰을 반환하도록 flex에 지시 할 수 있습니다. 그래서 당신은 두 가지 규칙으로 끝낼 : 새로운 언어가 사용자 정의 형식을 지원하는 경우 그냥 <type>
또는 <identifier>
을 발견했는지 여부를
<type> T_AMPERSAND <identifier>
및
<expression> T_LOGIC_AND <expression>
는, 렉서는 알 수 없습니다, 그래도. 이 경우 <type> '&' <identifier>
이 유효한 독립 실행 형 문으로 간주되는 반면 <expression> '&' <expression>
은 직사각형 (할당 오른쪽 오른쪽)으로 만 표시 될 수 있습니다.
사실 이러한 종류의 피드백을 렉서에게 줄 수 있습니까? 나는 #define과 같은 상태를 구현할 수 있었고 주석을 넣을 때 상태를 바꿀 수 있었지만 flex-> flex가 아닌 bison-> flex –
@ acidzombie24 : 피드백의 종류를 받아들이도록 어휘 분석기를 설계했다면, 그렇다. –
그럼 플렉스에 대해 말하지 않습니까? 흥미있다 –