Parsing 用空格分隔的单词列表的EBNF语法
我试图理解如何使用EBNF来定义形式语法,特别是由空格分隔的单词序列,比如Parsing 用空格分隔的单词列表的EBNF语法,parsing,grammar,lexer,ebnf,Parsing,Grammar,Lexer,Ebnf,我试图理解如何使用EBNF来定义形式语法,特别是由空格分隔的单词序列,比如 <non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal> [[…]] 定义单词终端的正确方法是什么 表示所需空白的正确方法是什么 如何表示可选的重复列表 在EBNF的任何地方都有示例演示教程吗 非常感谢!您必须决定词法分析器是否将返回空格的标记(终端)。您还必须决定它(词法分析器)将如何定义单
<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
[[…]]
非常感谢!您必须决定词法分析器是否将返回空格的标记(终端)。您还必须决定它(词法分析器)将如何定义单词,或者您的语法是否将这样做(在这种情况下,词法分析器将返回什么作为终端?) 对于其他人来说,这主要是理解EBNF表示法的细节的问题,这是一个ISO标准(ISO 14977:1996,可以从中免费下载,您也可以从中获得),但这是一个在实践中基本上被忽略的标准。(我处理的语言-C、C++、SQL在定义文档中使用BNF表示法,但它们中的任何一个都不EBNF)。
P.J.O'Neill
。词法分析器会返回什么标记non_empty_word_list = word { space word }
其中所有名称都是非终端。您需要根据系统的相关终端定义这些名称。您必须决定词法分析器是否要为空格返回标记(终端)。您还必须决定如何返回标记(词法分析器)是要定义单词,还是语法要这样做(在这种情况下,词法分析器将返回什么作为终端?) 对于其他人来说,这主要是理解EBNF表示法的细节的问题,这是一个ISO标准(ISO 14977:1996,可以从中免费下载,您也可以从中获得),但这是一个在实践中基本上被忽略的标准。(我处理的语言-C、C++、SQL在定义文档中使用BNF表示法,但它们中的任何一个都不EBNF)。
P.J.O'Neill
。词法分析器会返回什么标记non_empty_word_list = word { space word }
其中所有名称都是非终端。您需要根据系统的相关终端来定义这些名称。谢谢Jonathan-您的答案正是我需要的。这也有助于回答我的其他一些问题,比如,我是否需要lexer阶段,如果不需要,我是否可以单次通过,甚至使用解析器组合器l图书馆。这么多问题。再次感谢!谢谢乔纳森-你的回答正是我所需要的。这也有助于回答我的其他一些问题,比如,我是否需要一个lexer阶段,如果不需要,我是否可以通过一个简单的过程,甚至可以使用解析器组合器库。这么多问题。再次感谢!