Источники информации о шаблонах парсинга токенов - PullRequest
1 голос
/ 17 февраля 2011

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

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

В то время как я программировал годами и сказал бы, что я - пользователь регулярных выражений среднего уровня; Я первый, кто признает, что хардкорный анализ текста не является моей сильной стороной. И это должно быть быстрым, поэтому оптимизация является проблемой.

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

Заранее большое спасибо.

Ответы [ 5 ]

2 голосов
/ 17 февраля 2011

Если это немного сложнее, чем то, что вы можете сделать с помощью простого конечного автомата, который может легко понять один человек, я бы предложил использовать инструмент для генерации токенизаторов: * / 1005 * * и т.д. .

Вы также можете создать обработчик, созданный вручную сверху вниз, если скорость очень важна, или вы можете использовать генератор анализатора (например, ANTLR и т.п.) Парсер ручной работы обычно быстрее, но может создать несколько неприятных угловых случаев :). Вам понадобится хороший набор тестовых случаев для этого.

Я рекомендую вам начать отсюда: Разбор википедии . Посмотрите на анализ рекурсивного спуска (легче писать вручную и понятно, если ваш язык не очень сложен).

1 голос
/ 30 сентября 2014

Вы также можете использовать Анализатор Marpa , который даст вам преимущества общего практического анализа BNF - пример , другой пример .

1 голос
/ 17 февраля 2011

Используйте правила Perl 6. Они грамматически сложены в язык. Довольно мощный. Начиная с Perl 5.10, регулярные выражения не называются, хотя выглядит как регулярные выражения. Теперь это неотъемлемая часть языка, код и регулярные выражения неотличимы.

http://tripatlas.com/Perl_6_rules
http://www.programmersheaven.com/2/Perl6-FAQ-Regex

1 голос
/ 17 февраля 2011

Ну, во-первых, регулярные выражения нельзя использовать для анализа вложенных структур. Вам придется написать парсер. Существует множество инструментов, которые могут вам помочь, от почтенного yacc до antlr и многих других. Посетите страницу Википедии .

0 голосов
/ 17 февраля 2011

Абсолютно не пытайтесь использовать регулярные выражения для этого. Используйте парсер. Если текст в формате xml, на вашем любимом языке будет много парсеров. Если это не XML, то вам придется написать свой собственный анализатор.

...