Я бы хотел проанализировать CSV, используя контекстно-свободную грамматику. У меня уже есть реализация на C ++, но я хочу масштабировать CFG до более сложных проблем, но сначала мне нужно решить простую.
Итак, вот что у меня есть (мой синтаксис похож на повышение духа):
CSV состоит из одной или нескольких строк
Start >> +Line
Строка состоит из символов, разделенных запятыми, плюс EOL
Line >> Symbol >> *(',' Symbol) >> EOL
Разделитель EOL может быть в стиле Windows или Unix.
EOL >> -'\r' >> '\n'
Вот где я застрял при обработке строк в кавычках:
Symbol >>
string |
????
Пример сложных строк в кавычках, которые должны быть правильно проанализированы:
"This, is a ""complex"" example of a CSV string!"
"This, is a more """"""complex"""""" but theoretically possible example of a CSV string!"
Я новичок в CFG и не могу понять, как охарактеризовать это в CFG. Как правило, вам нужно игнорировать запятые и двойные двойные кавычки, когда государство входит в режим кавычек.
UPDATE:
Я только что понял, что мне нужно добавить больше состояний в мой концептуальный конечный автомат, исходя из понимания моей теории автоматов, что CFG может быть распознан с помощью автоматов:
Symbol -->
string
" doublequotemode "
' singlequotemode '
doublequotemode -->
*"" string *""
Вопрос в том, как это работает с бустом и жадным / не жадным разбором?