2012-04-14 4 views
1

나는 flex + bison을 사용하여 간단한 어셈블러를 작성했다. 어셈블리 언어에 전처리 기 (매크로)를 추가하고 싶습니다. flex + bison을 처음 사용하려고 할 때, 어떻게해야할지 모르겠습니다.전처리기를 flex + bison 어셈블러에 어떻게 추가해야합니까?

flex + bison의 별도 인스턴스를 추가하고 전처리 작업을 완전히 별도로 수행하는 것이 적절합니까? 아니면 처리 과정에 따라 다른 구문을 표현할 수 있습니까?

호기심, the assembler is here, DCPU-16 아키텍처의 경우.

답변

3

별도의 파서가 필요합니다. 이것이 gcc가하는 방법입니다. 단지 전처리 후에 컴파일을 멈출 수 있습니다 (-E, 나는 믿습니다). 기술적으로 단일 구문 분석기로 작성하는 것이 가능할 수 있지만 더 많은 문제가 발생할 수 있습니다. 왜 유용 할 지 특별한 이유는 없지만 별도로 유지하는 것은 사전 처리 후에 컴파일을 중지 할 수있게합니다. 전처리 기/어셈블러 자체뿐만 아니라이 코드로 작성된 프로그램에서도 오류를 쉽게 추적 할 수 있습니다.

+0

당신은 바람직한 * 효과 *를 설명합니다. 내가 묻는 것은 메소드이다 : flex + bison의 하나의 "인스턴스"에서 표현하고 (파서 콜백의 단계를 처리) 완전한 완전한 flex + bison 인스턴스를 갖는다. – blueshift

+2

두 개의 별도의 렉서와 파서를 작성하십시오. 접두어 지시문을 사용하면 충돌하지 않습니다. – Kevin

+0

감사합니다. 현명한 소리. – blueshift

2

광산을 살펴볼 수 있습니다. 나는 당신이 가지고있는 것과 같은 생각을 가지고 있습니다 : P You can find it here 그것은 표현을 지원합니다.하지만 앞으로 참조를 지원하고 싶다면 반드시 있어야한다는 것을 깨달았습니다. 어쩌면 Notch는 수정되지 않은 크기의 op 코드가 어셈블러를 만드는 것이 어렵다는 것을 알게 될 것입니다.

제목이 적당한 책은 Flex and Bison입니다. "상태"를 수행 할 수있는 방법을 보여줍니다. 렉서의 상태를 확인하고 파일 버퍼를 변경하십시오. 그것은 단지 그것을위한 파서/렉스를 우연히 보여줍니다. 그것은 내 학습에 많은 도움이되었습니다 :)

+0

고마워, 내가 살펴볼 게. 그리고 네가 심볼과 관련된 짧은 리터럴을 지원하고 싶다면 AST가 필요합니다. 그들은 세상을 어렵게 만들지 만 확실히 0x10c 세계의 도전의 일부로 간주 될 수 있습니까? :) – blueshift