자산 xchange 형식의 구문 분석기를 작성하고 있습니다. 그리고 필자는 bison 파일에 % token-table 지시어를 포함하고 있지만 플렉스 코드에서는 테이블이나 그와 관련된 상수에 액세스 할 수 없습니다.바이슨 2.6에서 토큰 테이블 yytname에 액세스 할 수 없거나 사라 졌습니까?
Frame|FrameTransformMatrix|Mesh|MeshNormals|MeshMaterialList|Material {
printf("A keyword: %s\n", yytext);
yylval.charptr_type = yytext;
int i;
for (i = 0; i < YYNTOKENS; i++)
{
if (yytname[i] != 0
&& yytname[i][0] == '"'
&& !strncmp(yytname[i] + 1, yytext, strlen(yytext))
&& yytname[i][strlen(yytext) + 1] == '"'
&& yytname[i][strlen(yytext) + 2] == 0)
return i;
}
}
GCC는 YYNTOKENS 및 yytname 모두가 선언되지 않은 말합니다 :이 코드를 컴파일 할 때 때문입니다. 그래서 토큰 테이블이 마침내 사용 중지되고 삭제되었거나 거래가 무엇입니까?
정적이라면 렉서 코드가 생성 된 Bison 코드 안에 있어야 할 필요가 있습니까? ... 필자는 Bison과 Flex를 함께 사용할 수 있다고 말합니다. 그러나 그것을 사용하는 일반적인 방법은 bison에 헤더를 생성하고 플렉스 생성기 파일에 헤더를 포함시키는 것입니다. – SaldaVonSchwartz
내가 틀렸다고 정정하십시오. 그렇다면 flex와 bison 파일을 분리하여 gcc를 통해 링크하면 나중에 generic 키워드 토큰을 반환하고 flex 코드에서 yylval을 설정 한 다음 bison에서 일반 제작을 만들어야합니다 일반적인 키워드가있는 경우 yyval을 검색하여 무슨 일이 일어나는지 확인할 수 있습니까? 테이블에 직접 접근하는 유일한 방법은 렉서 코드가 bison 파일 안에 있다면? – SaldaVonSchwartz
그리고 예, btw, 당신 말이 맞아요. 내가 % token-table로 전환하기 전에 잘못된 파일 (.tab.c)을 확인하고있었습니다. 하지만 여전히 .. 나는 테이블 옵션이 플렉스와 함께 사용되도록 의도되었다는 것을 문서에서 알았을 것 같다. – SaldaVonSchwartz