【问题标题】:Handling whitespace in EBNF处理 EBNF 中的空格
【发布时间】:2023-03-25 01:40:01
【问题描述】:

假设我为更简单的两项加法器定义了以下 EBNF:

<expression>    ::= <number> <plus> <number>
<number>        ::= [0-9]+
<plus>          ::= "+"

显示为here

除了术语之间的换行符/回车符之外,允许任何数量的空格的正确方法是什么?例如允许:

1 + 2
1 <tab> + 2
1           + 2

等等

例如,执行以下操作失败:

<whitespace>::= " " | \t

此外,似乎(几乎)每个术语的前后​​都有一个可选空格。比如:

<plus>          ::= <whitespace>? "+" <whitespace>?

如何正确解决?

【问题讨论】:

    标签: parsing syntax ebnf


    【解决方案1】:

    例如,XML 标准对whitespace 使用以下产生式:

    S ::= (#x20 | #x9 | #xD | #xA)+
    

    如果您不想要这些,可以省略 CR (#xD) 和 LF (#xA)。

    关于您观察到语法可能会被空白非终结符淹没,请注意空白处理可以在词法分析中完成,而不是在解析中。见EBNF Grammar for list of words separated by a space

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多