Я придумал ошибку «непризнанного правила» в Flex. Я прочитал несколько статей, но я не нашел решения для своей проблемы. Я попытался внести некоторые изменения в свой код, но ничто, кажется, не заставляет его работать (иногда эти изменения сделали его еще хуже). Я отправляю свой код ниже, надеясь, что решение будет найдено.Flex: ошибка непризнанного правила
Мой гибкий код:
%{
#include <stdio.h>
%}
VAR_DEFINER "var"
VAR_NAME [a-zA-Z][a-zA-Z0-9_]*
VAR_TYPE "real" | "boolean" | "integer" | "char"
%%
{VAR_DEFINER} {printf("A keyword: %s\n", yytext);}
{VAR_NAME} | ","{VAR_NAME} {printf("A variable name: %s\n", yytext);}
":" {printf("A colon\n");}
{VAR_TYPE}";""\n" {printf("The variable type is: %s\n", yytext);}
"\n"{VAR_DEFINER} {printf("Error: The keyword 'var' is defined once at the beginning.\n");}
[ \t\n]+ /* eat up whitespace */
. {printf("Unrecognized character: %s\n", yytext);}
%%
main(argc, argv)
int argc;
char** argv;
{
++argv, --argc;
if (argc > 0)
yyin = fopen(argv[0],"r");
else
yyin = stdin;
yylex();
}
спасибо! Но ... какие-либо указания по этому поводу? Кроме того, вы можете помочь мне решить следующую проблему: http://stackoverflow.com/questions/34375410/flex-how-to-define-a-term-to-be-the-first-one-at-the-beginning -of-a-lineexclus ??? –
@ DimitrisBouloutas: Объяснение того, как работать со сканерами и анализаторами, вероятно, будет слишком длинным для ответа на переполнение стека, но любой учебник по компилятору или учебник компилятора объяснит это. Я посмотрю на этот другой вопрос. –
Надеюсь найти что-то полезное для разбора в руководстве по Flex ... –