Я пишу программу, которая вводит прямое воспроизведение в пользовательском формате, а затем выполняет некоторый анализ на нем (например, количество строк и слов для каждого символа). Это просто для удовольствия и предлог для изучения классных вещей. Первым шагом в этом процессе является создание парсера для этого формата. Идет:Хорошая практика для синтаксического анализа данных в произвольном формате
####Play
###Act I
##Scene 1
CHARACTER 1. Line 1, he's saying some stuff.
#Comment, stage direction
CHARACTER 2, doing some stuff. Line 2, she's saying some stuff too.
Это довольно простой формат. Я широко читаю об элементах основного парсера, таких как CFG, поэтому теперь я готов выполнить определенную работу.
Я написал грамматику в EBNF и начал играть со шлейфом/зубров, но вызывает некоторые вопросы:
- ли сгибать/бизон слишком много для такого простого парсера? Должен ли я просто написать это сам, как описано здесь: Is there an alternative for flex/bison that is usable on 8-bit embedded systems??
- Какова хорошая практика в отношении соответствующих задач токенизатора и самого анализатора? Не существует ни одного решения, и для такого простого языка они часто перекрываются. Это особенно верно для flex/bison, где flex может выполнять некоторые интенсивные вещи с использованием регулярного выражения. Например, должен ли «#» быть токеном? Должен ли «####» быть токеном? Должен ли я создавать типы, которые содержат семантическую информацию, чтобы я мог напрямую идентифицировать, например, символ? Или я должен просто обработать его с помощью простейшего способа, а затем разрешить грамматику, определенную в бизоне, решить, что это такое?
- С flex/bison, имеет ли смысл выполнять анализ во время разбора или он более изящный для синтаксического анализа сначала, а затем снова работать с файлом с помощью другого инструмента?
Это меня очень смущает. Я ищу элегантное, возможно простое решение. Любые рекомендации?
Кстати, о языке программирования, мне все равно. На данный момент я использую C из-за flex/bison, но не стесняйтесь советовать мне о чем-то более практичном, если это широко используемый язык.
Кстати, если кто-то задавался вопросом, это [язык программирования Шекспира] (http://en.wikipedia.org/wiki/Shakespeare_%28programming_language%29), для которого есть компилятор: [http: // shakespearelang.sourceforge.net/](http://shakespearelang.sourceforge.net/) –