Backus-Naur形式的标记以双引号开头和结尾

时间:2013-11-15 19:19:19

标签: parsing bnf

是否可以写一个令牌的Backus-Naur形式描述:

  • 以双引号开头
  • 以双引号结尾
  • 可以包含内在 双引号

例如,我有一个名为MESSAGE的编程结构,它看起来像:

MESSAGE“她对他说”你好“”

可以用LL(1)Backus-Naur形式描述吗?

编辑:让我们假设我通过简单地迭代每个字符,一次一个地使用一个先行指针进行解析。

输入字符串是整个事物,包括MESSAGE。

1 个答案:

答案 0 :(得分:2)

这样的事情可能会起作用(对不起语法。不久之前,我与BNF合作过。)

message : MESSAGE message_text
message_text : " inner_message " | message_text inner_message " inner_message "
inner_message : [a-z0-9...]+

您的示例MESSAGE "She said "Hello" to him" 应分两步解释:第一,message_text的第二种形式获得hello " to him",其次,message_text的第一种形式获得"She said "

inner_message必须包含所有可能的字符和空格。

正如评论中所提到的,“魔力”在于message_text的第二个定义。由于BNF没有循环或if的概念,递归是描述重复的唯一方法。只需要确保语法不会模糊,意味着对于每个可能的输入,只存在一个有效路径(或者没有,它声明了一个错误)。除" he replied with "" silence"中的空中间字符串外,上述语法应该有效。