我尝试解决以下解析问题,但是我失败了:
我有一个CSV文件,文件中的某个命令可以更改分隔符,并且可以使用斜杠转义当前分隔符。看看这个例子:
a,b,c,list;with;values
a,b,c,list\,with\,values
@separator,;
a;b;c;list,with,values
a;b;c;list\;with\;values
这可能吗?怎么样?
答案 0 :(得分:1)
似乎你想要一个带语境的语法。 Rascal仅支持无上下文语法。
格式看起来很简单,不能用一些上下文变量来解决这个问题吗? (在任何具有基本字符串操作的语言中)
答案 1 :(得分:0)
如果我没有弄错的话,我会在lang::csv::IO
中使用CSV阅读器处理这些例外情况。
如果你想为此编写语法,你可以使用参数化的非终端(我猜)为你使用的每个新分隔符实例化一个新的语法,或者为每个分隔符使用不同的语法。然后,您首先在@separator
上拆分文件,然后用不同的语法解析不同的部分。