2013-04-02 1 views
0

저는 Lex를 사용하여 C 프로그램에서 주어진 입력 문자열을 구문 분석합니다. 모든 것이 지금까지 작동하지만 원래 입력 문자열에서 일치하는 토큰의 범위를 알고 싶습니다. 이것이 가능한가?일치하는 토큰의 범위를 Lex/Yacc로 검색하십시오.

yytext는 일치하는 토큰을 제공하지만 원본 문자열의 토큰 범위는 제공하지 않습니다. 토큰은 입력 문자열에 여러 번 존재할 수 있기 때문에 항상 유효하지는 않으므로 처음/마지막/등을 간단히 검색 할 수는 없습니다. 입력 문자열에서 토큰의 발생 - 나는 다음과 같은 예를 들어 경기의 정확한 범위를 알아야하는 것은 보여줍니다

예 입력 :

token "min": range 27-30 (and not 2-5) 

I "5 분에서 우유를 사라고 알려줘" 이미 yy_buffer_state를 살펴 봤지만 필요한 정보를 보유하지 않은 것 같습니다.

+1

질문에 태그를 추가하십시오. 이것은 Adobe/Apache 프레임 워크와 관련이 없으므로 Flex 태그를 사용하지 않아야합니다. gnu-flex는 어휘 분석기에 사용됩니다. – JeffryHouser

답변

1

각 플렉스 규칙에서 기본적으로 count + = strlen (yytext)가 사용되면 실행중인 문자 수를 유지해야합니다. 키워드 나 변수 또는 그 범위를 필요로하는 것과 일치하는 규칙에서 (나는 그것들을 좌표라고 부른다) int start = count; count + = strlen (yytext); int end = count이면 start와 end는 좌표입니다.

+0

나는 좀 더 우아한 것을 기대했지만 감사합니다. 그럼에도 불구하고 쉬운 해결책입니다. – myell0w

관련 문제