ANTLR подходит для разбора текстовых отчетов? - PullRequest
0 голосов
/ 16 декабря 2010

В настоящее время я использую регулярные выражения для разбора текстового отчета с целью извлечения различной информации. Хотя этот подход работает, становится все труднее поддерживать регулярное выражение. Мне интересно, может ли 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 или я должен искать в другом месте? Большое спасибо!

1 Ответ

3 голосов
/ 16 декабря 2010

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

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

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

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

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

...