2010-12-15 2 views
0

В настоящее время я использую регулярные выражения для анализа текстового отчета, чтобы извлекать различные биты информации. Хотя этот подход работает, становится все труднее поддерживать регулярное выражение. Мне интересно, сможет ли Antlr обеспечить лучший способ выполнить задачу в конечном итоге. Кстати, я раньше не использовал Antlr.ANTLR подходит для синтаксического анализа текстовых отчетов?

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

Подробнее о моем текстовом отчете: в отчете есть несколько разделов, и меня интересуют только некоторые разделы, игнорируя остальные. Например, есть раздел нити свалки:

===Start=== 
(some text I do not care about.) 
thread <thread-number> <owning-proc-name> <proc-id> 
<resource-owned-by-thread> (optional line) 
... 
===End=== 

И тогда есть завершившееся приложение раздел:

===Start=== 
(some text I do not care about, followed by the stack trace of the app) 
<app-name> 
<stack-layer1> 
<stack-layer2> 
... 
===End=== 

Я надеюсь выйти из разбора отчета является объектом данных с геттер методы к различным данным в отчете.

Соответствующая задача для Antlr или я должен искать в другом месте? Большое спасибо!

ответ

3

Можете ли вы легко отфильтровать текст, который вам не нужен, с помощью регулярного выражения? Если да, то вы могли бы взять гибридный подход, который был бы очень эффективным:

  1. Выполнить отчет через регулярное выражение фильтра, чтобы удалить текст игнорировать
  2. Выполнить отчет через ANTLR синтаксический анализатор распадаться на части, которые вы care about

Для того, чтобы это сработало, части, о которых вы заботитесь, должны были бы соответствовать языку, на котором вы можете написать грамматику ANTLR.

Другой альтернативой могло бы стать создание пользовательского сканера, который удаляет части, чтобы игнорировать и символизировать остальные.

Все зависит от сложности и регулярности деталей, которые необходимо сохранить.

Смежные вопросы