2
영문자를위한 어휘 분석기를 만들려고합니다. 규칙 중 하나는 식별자가 숫자로 시작할 수 없다는 사실을 말합니다. 다음은 숫자와 식별자를 정의하는 정규 표현식입니다. .lxi 파일에 정의 Flex가 이름 지정 식별자의 오류를 식별하는 데 작동하지 않습니다.
NUMBER [+-]?[0-9]+
ID [a-zA-Z][a-zA-Z0-9_]*
및 규칙 : 입력 파일에 식별자 이름 지정 규칙을 존중하지 않는 토큰이있을 때
%%
{DELIMITATOR} printf("Delimitator: %s\n",yytext);
{NUMBER} printf("Number: %s\n",yytext);
{ID} printf("Identifier: %s\n",yytext);
. printf("Error: %s\n",yytext);
%%
이 문제가 나타납니다.
Number: 1;
Identifier: abc;
대신, 오류 메시지를 받고 싶습니다 : 예를 들어,
a := 1abc
위해 나는 다음과 같은 결과를 얻을. 내가 할 수있는 일이 있습니까? 숫자를 정의 할 때 후행 컨텍스트를 사용하려고했지만 작동하지 않는 것 같습니다.
수 없습니다. Flex는 존재하는 토큰을 정확하게 식별하고 그 토큰을 식별합니다. 불법 토큰에 대한 규칙을 작성할 수 없으며 원하지 않습니다. – EJP