【发布时间】:2011-12-25 13:19:10
【问题描述】:
我想使用上下文无关语法解析 CSV。我已经用 C++ 实现了,但我想将 CFG 扩展到更难的问题,但首先我需要解决一个简单的问题。
这就是我目前所拥有的(我的语法类似于 boost spirit):
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 中描述这一点。当状态进入引号模式时,基本上你需要忽略逗号和双双引号。
更新: 我刚刚意识到我需要在我的概念有限状态机中添加更多状态,因为我从我的自动机理论中了解到 CFG 可以被下推自动机识别:
Symbol -->
string
" doublequotemode "
' singlequotemode '
doublequotemode -->
*"" string *""
问题是这如何与 boost 和贪婪/非贪婪解析一起工作?
【问题讨论】:
标签: boost csv boost-spirit context-free-grammar