используйте yylex () дважды подряд - PullRequest
0 голосов
/ 05 декабря 2011

Так что мой вопрос довольно прост, я думаю, что на него уже отвечали ранее, но я не могу получить хорошую ветку об этом: могу ли я проанализировать файл один раз, собрать некоторую необходимую информацию для инициализации моих структур, а затем разобрать это "по-настоящему" во второй раз?

Когда я дважды звоню yylex(), это, похоже, ничего не делает. Или мне нужно сбросить указатель чтения моего файла? Я нуб, так что это может быть глупый вопрос! В любом случае, любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Да, вы достигли конца файла. Вам нужно повторно инициализировать указатель чтения. Тем не менее, проверьте эту ссылку , чтобы найти лучшее решение.

1 голос
/ 12 декабря 2011

Используйте yyrestart(FILE *in).

Но учтите, что в flex manual предлагается, чтобы вместо двухпроходного сканера, подобного этому, вы сначала создавали дерево разбора.

1 голос
/ 12 декабря 2011

Так что вот если это кого-то интересует:

Я пытался использовать rewind, функцию, доступную через #include <stdio.h>.Хотя после того, как я написал что-то вроде:

yylex();
rewind(yyin);
yylex();

, у меня все равно было плохое поведение.Вот как я полностью решил свою проблему:
В своем лексере я добавил:

<<EOF>>    yyterminate();

После этой модификации и кода, описанного выше, полученный код работал должным образом.

Я надеюсь, что это будет полезно!

...