새로운 기능, 그리고 알고 싶은 점은 Flex 프로그램에서 일치하는 문자를 저장 한 다음 main에서 한 줄로 인쇄 할 수 있다는 것입니다. - 또한 고유성을 적용일치하는 문자를 플렉스에 저장합니다.
ID [A]
ID1 [B]
ID2 [C]
ID3 [D]
%%
{ID}
{ID1}
{ID2}
{ID3}
새로운 기능, 그리고 알고 싶은 점은 Flex 프로그램에서 일치하는 문자를 저장 한 다음 main에서 한 줄로 인쇄 할 수 있다는 것입니다. - 또한 고유성을 적용일치하는 문자를 플렉스에 저장합니다.
ID [A]
ID1 [B]
ID2 [C]
ID3 [D]
%%
{ID}
{ID1}
{ID2}
{ID3}
이 작품의 인식 및 캡처 부분에 대한 더 또는 MCVE (Minimal, Complete, Verifiable Example를) 작 : 나는 아래의 패턴과 규칙을 가지고있다. 토큰이 단일 (널이 아닌) 문자인지 확인하기 위해 assert()
을 사용합니다.
%{
#include <assert.h>
%}
%option noinput
%option nounput
%option noyywrap
ID0 [A]
ID1 [B]
ID2 [C]
ID3 [D]
ID4 [E]
%%
{ID0} { printf("{ID0}: %s\n", yytext); return 1; }
{ID1} { printf("{ID1}: %s\n", yytext); return 1; }
{ID2} { printf("{ID2}: %s\n", yytext); return 1; }
{ID3} { printf("{ID3}: %s\n", yytext); return 1; }
{ID4} { printf("{ID4}: %s\n", yytext); return 1; }
. { printf(" . : %s\n", yytext); }
%%
int main(void)
{
char token[512] = "";
char *ptr = token;
/* Efficiency and safety is not under discussion */
while (yylex())
{
assert(yytext[0] != '\0' && yytext[1] == '\0');
if (strchr(token, yytext[0]) == 0)
*ptr++ = yytext[0];
}
*ptr = '\0';
printf("Token sequence: [%s]\n", token);
return 0;
}
(나는. 이름의 더 나은 일관성을 ID0
에 ID
개명)
예 실행은 (I 소스의 이름 fx83.l
을 사용 따라서 fx83
소스에서 생성 된 프로그램의 이름) :
$ ./fx83 <<< "aBcDeAbCdEFf"
. : a
{ID1}: B
. : c
{ID3}: D
. : e
{ID0}: A
. : b
{ID2}: C
. : d
{ID4}: E
. : F
{ID0}: A
{ID1}: B
. : d
{ID2}: C
{ID3}: D
. : e
{ID4}: E
{ID4}: E
. : f
Token sequence: [BDACE]
$
(나는 그것을 중요한 생각하지 않는다,하지만 난 GCC 6.2.0와 맥 OS 시에라 10.12.2에 flex 2.5.35 Apple(flex-31)
을 사용하고 있습니다.)
도움과 시간이 너무 감사드립니다. – tzavsk
'yytext'가 무엇을위한 것인가? 물론, 그 패턴에 대한 기본 동작 만 있습니다. (그리고 ID의 접미사가 있어야합니다. 그러나 이것은 유물론의 문제입니다.) 그래서 여러분은 약간의 작업을해야합니다. 'main()'에 일치하는 문자를 처리 할 기회를줍니다. 그림과 같이 한 문자로 된 문자 클래스가 약간 이상하지만 형식적으로 잘못되었습니다. 약간의 공간도 사용해야합니다. –
예, 메인에 – tzavsk
yytext()가 있습니다. 함수? 필자는'yytext'가'char yytext [];'또는'char * yytext;'라고 생각하는 데 익숙합니다. 어떤 변형이 사용되는지 기억하고있는 것 같습니다. Flex가하는 일을 생각해보십시오. 'main()'으로 돌아가려면 각 패턴 다음에 뭔가를 추가해야합니다. - {return 1; } '를 사용하여 성공적인 일치를 나타냅니다. 일치하지 않는 것은 IIRC에서 무시됩니다. –