Parsing 以双引号开始和结束的标记形式

Parsing 以双引号开始和结束的标记形式,parsing,bnf,Parsing,Bnf,是否可以编写令牌的Backus Naur表单描述,以: 以双引号开始 以双引号结束 可以包含内部 双引号 ? 例如,我有一个名为MESSAGE的编程结构,它看起来像: 留言“她向他问好” 这可以用LL(1)Backus Naur表来描述吗 编辑:假设我是通过简单地对每个字符进行迭代来解析的,一次一个,使用一个前瞻指针 输入字符串是整个内容,包括消息 像这样的东西可能会起作用(对不起,语法太复杂了。我是不久前使用BNF的) 您的示例MESSAGE“她对他说了声“你好” 应该分两步进行解释:首先

是否可以编写令牌的Backus Naur表单描述,以:

  • 以双引号开始
  • 以双引号结束
  • 可以包含内部 双引号
?

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

留言“她向他问好”

这可以用LL(1)Backus Naur表来描述吗

编辑:假设我是通过简单地对每个字符进行迭代来解析的,一次一个,使用一个前瞻指针


输入字符串是整个内容,包括消息

像这样的东西可能会起作用(对不起,语法太复杂了。我是不久前使用BNF的)

您的示例
MESSAGE“她对他说了声“你好”
应该分两步进行解释:首先,第二种形式的
消息文本
得到了他
hello”
,然后,第二种形式的
消息文本
得到了
,她说“

内部消息
必须包含所有可能的字符和空格


正如评论中提到的,“魔力”在于
消息文本的第二个定义。由于BNF没有循环或if的概念,递归是描述重复的唯一方法。我们只需要确保语法不会变得模棱两可,这意味着对于每个可能的输入,只存在一个有效路径(或者不存在,这会声明一个错误)。除了像在
中这样的中间空字符串之外,上面的语法应该可以使用。他回答说“沉默”

我认为你没有提供足够的信息来说明你试图做什么来得到一个明确的答案。
消息
是输入的一部分吗?消息可以跨越多行吗?您正在解析什么,以及如何解析?您如何知道消息的结尾?为什么?你的例子中不是两条消息之间有一个单词Hello吗?消息是输入的一部分,但我已经知道如何在BNF中指定该部分。让我们假设它可以跨越多行(我正在进行研究,以确定这是否正确,因为如果它不能,那么我可以解析直到换行)。我会更新这个问题,让它更清楚。有趣。消息文本的第二个选项对我来说很难解释。这就是魔力所在吗?你介意试着用对话的方式解释一下吗?我试着回答。让我们看看我是否能回答任何其他具体问题。啊,我明白了。我现在可以通过假设第一个选项是递归的基本情况来理解它。那么你怎么看:message_text:“internal_message”|“[message_text]+”这会起作用,对吗?如果BNF允许像正则表达式一样的LOP。在这一点上,BNF是非常基本的
message : MESSAGE message_text
message_text : " inner_message " | message_text inner_message " inner_message "
inner_message : [a-z0-9...]+