我有一个需要解析的软件的(专有)输出。可悲的是,有未转义的用户名,我正在抓挠我的头发,试图知道我是否可以描述我需要使用 BNF(或 EBNF 或 ABNF)解析的文件。
这个问题,过于简单化了(它实际上只是一个例子),可能看起来像这样:
(数据) ::= <用户名>
<用户名> ::= (其他类型的数据)
并且在某些情况下,用户名也可以出现在一行的中间,而不是出现在左侧或右侧。
问题是用户名未转义,并且对用户名没有足够的限制(它们是可打印的 ASCII,最多 20 个字符,并且不能包含换行符)。因此,例如,“=”将是一个完全有效的用户名。“= 1 = john = 2”也是如此(因为用户在登录时可以选择他们想要的任何用户名,并且这些在我得到的输出中显示为未转义)。
我问是因为我的解析器阻塞了一些非常有创意的用户名(再一次,不在我的控制范围内,它们很“奇怪”,我需要处理它),我找不到一个简单的方法来处理这个问题。另请注意,我事先不知道用户名(例如,我无权访问包含用户创建的所有用户名的数据库)。
那么不受限制和未转义的用户名是否与 BNF 不兼容?
PS:如果我犯了错误,请对我保持冷静,这是我在 stackoverflow 上的第一篇文章 :)