我试图了解如何使用 EBNF 来定义形式语法,特别是由空格分隔的单词序列,例如
<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
- 定义单词终端的正确方法是什么?
- 表示所需空格的正确方法是什么?
- 可选的重复列表如何表示?
- 是否有任何关于 EBNF 的示例教程?
提前谢谢了!
你必须决定你的词法分析器是否要为空格返回一个标记(终端)。您还必须决定它(词法分析器)将如何定义单词,或者您的语法是否会这样做(在这种情况下,词法分析器将作为终端返回什么?)。
剩下的,主要是理解 EBNF 表示法的精妙之处,这是一个 ISO 标准(ISO 14977:1996——它可以从免费提供的标准免费下载,你也可以从ISO获得) ,但这是一个在实践中很大程度上被忽略的标准。(我处理的语言——C、C++、SQL——在定义文档中使用 BNF 表示法,但在它们中的任何一种都不是 EBNF。)
P. J. O'Neill
。词法分析器会为此返回什么标记?{
,}
或者您可以使用 Kleene Star 表示法。我认为可以使用以下方法定义一个非空的、以空格分隔的单词列表:
non_empty_word_list = word { space word }
其中所有名称都是非终结符。您需要根据系统的相关终端来定义这些。