Здравствуйте. Сделал вот такой тестовый пример проявляющий суть Например есть вот такой фрагмент языка (всё есть в прикреплённом файле включая makefile) Код (Text): DSN=DeluxeCD;DBQ=D:\DOCUME~1\Administrator\APPLIC~1\MICROS~1\CDPLAY~1\DeluxeCD.mdb;DefaultDir=D:\DOCUME~1\Administrator\APPLIC~1\MICROS~1\CDPLAY~1; SELECT Titles.TitleID, Titles.Artist, Titles.Title, Titles.Copyright, Titles.Label, Titles.ReleaseDate, Titles.NumTracks, Titles.NumMenus Код сканера Код (Text): %{ #include "y.tab.h" %} %% [\n]+ { yylineno++; return NEWLINE;} [0-9]+ return NUMBER; [a-zA-Z0-9:\\~]+ return PARAM; = return EQUAL; ; return COMCOLM; , return COMMA; \. return DELIM; ` return UPCOMMA; "SELECT"|"FROM"|"ORDER BY" return DML; [\t ] return TABORSPACE; %% int yywrap(void) { return 1; } Код анализатора Код (Text): %{ #include <stdio.h> int yylex(void); extern int yylineno; extern FILE *yyin; extern char* yytext; void yyerror(char *); %} %token NEWLINE %token NUMBER %token PARAM %token EQUAL %token COMCOLM %token COMMA %token DELIM %token UPCOMMA %token DML %token TABORSPACE %% start: params lines query ; lines: NEWLINE | lines NEWLINE ; params: param COMCOLM | param COMCOLM params ; param: PARAM EQUAL PARAM ; query: DML tables DML PARAM DML tables |DML tables DML PARAM ; tables: param DELIM param | param DELIM param COMMA tables %% int main(int argc, char *argv[]){ if (argc!=2){ printf("vvedite: %s infile\n",argv[0]); return 0; } yyin = fopen(argv[1], "r"); if (yyin!=NULL){ yyparse(); return 1; } else{ printf("nepalocilos otkrit fail\n"); return 0; } } void yyerror(char *s){ extern int yylineno; printf("\tOsibka %d stroka : '%s'\n\n",yylineno,yytext); } Пробую выполнить получаю тоесть на вот этом месте (красным выделил) Если переправляю в коде сканера Код (Text): [a-zA-Z0-9:\\~\.]+ то тоже получаю ошибку. Сам символ точки мне нужно распозновать только в query части (в анализаторе) Другими словами тут но не тут (где у меня ошибка и возникает) Подскажиет пожалуйста, как быть? P.S. Цвета подсветки только неособо хорошо вышли