我试图理解如何使用EBNF来定义一个正式的语法,特别是一个由空格分隔的单词序列,比如
<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
非常感谢提前!
答案 0 :(得分:2)
您必须决定您的词法分析器是否要返回空格的令牌(终端)。您还必须决定它(词法分析器)将如何定义单词,或者您的语法是否会这样做(在这种情况下,词法分析器将作为终端返回什么?)。
其余的,主要是理解EBNF符号的细节问题,这是一个ISO标准(ISO 14977:1996 - 可以从Freely Available Standards免费下载,你也可以来自ISO),但这是一个在实践中被忽略的标准。 (我处理的语言--C,C ++,SQL - 在定义文档中使用BNF表示法,但它们中的任何一个都不是EBNF。)
P. J. O'Neill
。词法分析器会为此返回什么标记?{
和}
大括号中,您也可以使用Kleene Star符号。我认为可以使用以下方法定义非空的,以空格分隔的单词列表:
non_empty_word_list = word { space word }
其中所有名称都有非终端。您需要根据系统的相关终端来定义它们。