lex, используя flex -gettin вывод из файла lex.yy.c - PullRequest
0 голосов
/ 06 ноября 2011

я написал программу lex (файл .l) для подсчета количества строк и символов ПРОГРАММА:

%{
  int charcount=0,linecount=0;
%}
%%
.charcount++
\n linecount++,charcount++;
%%
main()
{
yylex();
printf(“lines  %d”,linecount);
printf(“characters %d”,charcount);
}
int yywrap()
{
return 1;
}

я использую гибкий бизон и кодовые блоки после написания программы я выполнил его с помощью команды flex lccc.l (lccc - имя файла) теперь у меня есть файл lex.yy.c подскажите пожалуйста как мне получить вывод компиляция lex.yy.c - это igivng и ошибка ... но эта программа отлично работает на linux, который у меня в колледже, дома я использую вышеупомянутые твики на windows .. пожалуйста, помогите!

это ошибка:

 J:\> gcc lex.yy.c
 lccc.l:  In function 'main':
 lccc.l:13: error:  stray'\223' in program
 lccc.l:13: error:  'lines' undeclared (first use in this function )
 lccc.l:13: error:  (Each undeclared identifier is reported only once
 lccc.l:13: error:  for each function it appears in. )
 lccc.l:13: error:  stray'\224' in program
 lccc.l:13: error:  'd' undeclared (first use in this function )
 lccc.l:14: error:  stray'\223' in program
 lccc.l:14: error:  'characters' undeclared (first use in this function )
 lccc.l:14: error:  stray'\224' in program

1 Ответ

0 голосов
/ 07 ноября 2011

Вам необходимо заключить пользовательский код в фигурные скобки. И после запятой: charcount++ и вы не можете разделять операторы запятой, поэтому linecount++, charcount++; должно быть linecount++; charcount++;.

Попробуйте это:

%{
  int charcount=0, linecount=0;
%}
%%
.  {charcount++;}
\n {linecount++; charcount++;}
%%
main()
{
  yylex();
  printf("lines  %d", linecount);
  printf("characters %d", charcount);
}
// ...
...