EBNF语法用于由空格分隔的单词列表

时间:2012-10-03 16:07:13

标签: parsing grammar lexer ebnf

我试图理解如何使用EBNF来定义一个正式的语法,特别是一个由空格分隔的单词序列,比如

<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
  1. 定义单词终端的正确方法是什么?
  2. 表示所需空格的正确方法是什么?
  3. 如何表示可选的重复列表?
  4. 是否有任何关于EBNF的示例教程?
  5. 非常感谢提前!

1 个答案:

答案 0 :(得分:2)

您必须决定您的词法分析器是否要返回空格的令牌(终端)。您还必须决定它(词法分析器)将如何定义单词,或者您的语法是否会这样做(在这种情况下,词法分析器将作为终端返回什么?)。

其余的,主要是理解EBNF符号的细节问题,这是一个ISO标准(ISO 14977:1996 - 可以从Freely Available Standards免费下载,你也可以来自ISO),但这是一个在实践中被忽略的标准。 (我处理的语言--C,C ++,SQL - 在定义文档中使用BNF表示法,但它们中的任何一个都不是EBNF。)

  1. 无论你想做什么,都要正确定义一个单词。例如,您需要考虑如何处理名称P. J. O'Neill。词法分析器会为此返回什么标记?
  2. 这与上一期密切相关;词法分析器将要返回的终端是什么。
  3. 可选的重复列表包含在{}大括号中,您也可以使用Kleene Star符号。
  4. R. S. Scowen有一篇论文Extended BNF — A generic base standard解释了EBNF。还有EBNF上的维基百科条目。
  5. 我认为可以使用以下方法定义非空的,以空格分隔的单词列表:

    non_empty_word_list = word { space word }
    

    其中所有名称都有非终端。您需要根据系统的相关终端来定义它们。

相关问题