문제

어떻게 구현합니까? #define YACC/Bison이있는 매크로?

모든 정의 문자가 일반 변수와 일치해야한다고 생각했습니다. 변수는 다음과 같이 정의됩니다 [a-zA-Z_][a-zA-Z0-9_]* 그래서 나는 변수가 정의 된지 여부를 확인하기 위해 수표를 넣을 수 있다고 생각합니다. 그런 다음 텍스트를 텍스트로 바꾸십시오.

어떻게 할 수 있습니까? 지금 당장 나는 마치 내가 그것을 정의한 것처럼 나쁜 단어를 완전히 무시하고 싶습니다. #define BAD C.에서 아래는 해당 Lex 규칙의 코드이지만 잘못하고 있습니다. 또한 Lex는 "Ba"가 스트림에있는 것에 대해 불평합니다. 아래가 완전히 잘못되고 비논리적이라는 것을 알고 있으므로 어떻게 무시합니까? 그러면 플로트와 같은 것으로 어떻게 교체합니까?

    if(strcmp(yytext, "BAD")==0) {
        int i, l = strlen(yytext);
        for(i=0; i<l; i++) { REJECT }
        return;
    }
    return VAR; }

주요 단계는 1) 정의 정의, 2) 소스에서 감지 3) Lex를 거시적 문자를 잊게 만들었습니다. 4) 새 올바른 문자 삽입.

도움이 되었습니까?

해결책

정의를 찾기 위해 Lex에 규칙을 두십시오. 그런 다음 UNPUT를 사용하여 교체 텍스트를 삽입하십시오. 참고 텍스트는 뒤로 삽입해야합니다

[a-zA-Z0-9_]* {
        if(strcmp(yytext, "HARDCODED_DEFINE")==0) {
            const char s[]="int replacement_text";
            int z;
            for(z=strlen(s)-1; z>=0; z--)
                unput(s[z]);
        }
        else
            return VAR_TOK; 
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top