0

我想解析包含换行符的文件的文本。该文件可以在 Windows 或 Unix 中,但现在它是一个包含以下内容的 Windows 文件:

(**************
***************)

上面的文件内容已被读入,slurp并将包含一个换行符。这是我尝试使用的语法:

S = start-comment stars <inside-comment>
start-comment = '('
stars = '*' +
<inside-comment> = '\n' +

这个语法也是从一个文件中引入的,我相信这会让事情变得更容易一些:

“唯一需要的转义字符是字符串和正则表达式的普通转义字符(此外,instaparse 还支持单引号字符串中的 \')。”

换行符似乎没有被解析:

Parse error at line 1, column 16:
(**************
               ^
Expected one of:
"\n"
"*"

我需要设置什么<inside-comment>,以便错误出现在第二行的第一个星上,这将表明语法已识别换行符?

4

2 回答 2

3

Windows 中的换行符显示为\r\n,而 Unix 中的换行符显示为\n. 所以你需要这样的东西:

#'\r?\n'

如果您的语法在字符串内,则将黑斜线加倍:

"some-rule = #'\\r?\\n'"
于 2016-08-23T19:02:35.353 回答
0

这会解析到最后:

S = start-comment stars <inside-comment-1> stars end-comment
start-comment = '('
end-comment = ')'
stars = '*' +
<inside-comment-1> = '\n' | '\r\n'
<inside-comment-2> = '\r?\n'

请注意,<inside-comment-2>这不起作用。虽然<inside-comment-1>有效,但可能有一种更优雅的方式来越过换行符?

于 2016-08-24T01:16:53.640 回答