2013-02-02 2 views
0

문자열을 입력으로 사용하는 lex 코드를 작성하려고합니다. 긴 사전 파일을 구문 분석하여 해당 사전에서 가장 긴 단어를 찾습니다 그 끈에있는 편지들. 문자열의 각 문자는 0 번 이상 사용할 수 있습니다. "in"이라는 단어는 "input"에 유효합니다. 여기에 내가 지금까지 가지고있는 것이있다 :Lex : 다른 단어의 문자로 구성된 가장 긴 단어

%{ 
#include <stdio.h> 
%} 

%option noyywrap 

%% 
[input]+ { 
      printf("This is the longest I think: %s\n", yytext); 
     } 

.|\n {} 
%% 

int main(void) 
{ 
    yylex(); 
    return 0; 
} 

그러나 이것은 내가 기대하는 바를 실제로하지 못한다. 이 코드는 사전에있는 모든 단어의 일치하는 부분을 조사하여 "i", "iu", "inu"등과 같은 출력을 얻습니다.이 단어는 분명히 유효한 단어가 아닙니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?

+0

이것은 스크류를 망치로 망치로 사용하려고하는 것과 같습니다 - 렉스는 입력 스트림에서 토큰을 인식하기위한 것이지 사전을 검색하거나 순열을 찾는 것이 아닙니다 ... –

+0

당신이하고있는 것은 단어를 보는 것입니다 'inptu'만으로 구성된 편지 ... – vonbrand

답변

1

정규식의 일부로 줄 시작 및 줄 끝 표시를 사용하여 줄의 일부만이 아닌 전체 줄을 일치시킬 수 있습니다. 나는 이것이 더 직접적으로 질문을 해결할 생각보다 당신은 당신이 지금까지 발견 한 가장 긴 문자열을 추적하는 몇 가지 별도의 논리가 필요합니다

^[input]+$ 

[input]+에서 정규 표현식을 변경하지만, 당신이 가지고있는 코드에서 판단 해보십시오 손.

희망이 도움이됩니다.

+0

위대한 답변이지만, 실수로 내 질문에 매우 중요한 부분을 빠뜨렸다. 문자열의 각 문자는 0 번 이상 사용할 수 있습니다. "in"이라는 단어는 "input"에 유효합니다. 이 추가적인 제약으로 나를 도울 수 있습니까? –

+0

@ JohnRoberts- 나는 위의 정규식이 "in"이라는 단어와 일치한다고 생각한다. 정규 표현식'[input] +'은 "i, n, p, u, t 문자의 1 개 이상의 사본으로 구성 될 수있는 단어를 의미합니까 아니면 내가 진술을 잘못 해석합니까? – templatetypedef

+0

네, 맞습니다 - 내 코드에 오타가 있었어. 고마워. –

관련 문제