Я работаю над моделью интеллектуального агента, которая требует в качестве входных данных список событий. События происходят из выходных данных другой модели и находятся в (большом) текстовом файле. Текстовый файл представляет собой список всех событий (включая ненужные события, которые меня не волнуют), поэтому я написал сканер с использованием flex, который может найти полезные биты. Каркас для модели интеллектуального агента уже написан на C ++.
Каждое событие имеет временную метку и содержит большое количество информации о событии. Формат входного файла постоянен, поэтому мне не нужно проверять синтаксис. Я не знаю, предложит ли Бизон какие-то преимущества, потому что грамматика на самом деле довольно простая. Там нет реальных изменений.
Мне просто нужен способ поместить каждое событие (и всю информацию из этого события) в стек. Интеллектуальный агент действует на каждое событие в хронологическом порядке, поэтому мне нужно, чтобы программа просканировала весь входной файл, а затем поместила каждое событие в стек в обратном порядке (первое событие во входном файле должно быть последним событием, помещенным в стек). Это позволит интеллектуальному агенту извлекать события из стека и обрабатывать их по одному за раз.
Я думаю, что бизон мне мало поможет, потому что грамматика - это просто перечисление всех токенов последовательно. В основном это будет выглядеть так:
eventlist: /* nothing */
| eventlist event EOL
;
event: token1 token2 token3 ... tokenN-1 tokenN
Вот небольшой фрагмент входного файла, чтобы вы могли понять, что я имею в виду:
Время сценария: ДЕНЬ 1 00: 00: 00
[DATA FUSION EVENT] Новый трек сформирован
Краткое описание
Фактическая цель: RF HQ
Fusion Center Местоположение: CVN Enterprise_0
Название Fusion Center: DEFAULT FUSION
Воспринимаемая цель
Воспринимаемая идентификация: Неизвестно
Воспринимаемая классификация: неизвестно
Рабочая среда: Земля
У меня есть несколько вопросов:
1) Как интегрировать сканер, сгенерированный Flex, с более крупной программой, которая уже существует?
2) Дадут ли бизоны какие-либо преимущества, или мне лучше написать свою собственную программу, чтобы поместить все токены в структуру данных и поместить их в стек?
2a) Если bison лучше, то это решает вопрос 1, но как мне вызвать bison из моей программы, а затем заставить bison вернуть указатель на стек, чтобы программа могла его использовать?
// Отредактировано: я выяснил, как вызывать flex из внешней программы на C ++. До сих пор я не смог создать программу для зубров, которая будет делать то, что я хочу (а именно, возвращать указатель на стек событий).