【问题标题】:Can I use regular expressions to define strings in ISO EBNF?我可以使用正则表达式在 ISO EBNF 中定义字符串吗?
【发布时间】:2015-04-11 12:52:57
【问题描述】:

我正在使用标准化版本 (ISO/IEC 14997 : 1996(E)) EBNF 来定义我的语法。 标准化版本是一种元元语言(它可以自己解析)。

我这样定义letter

letter =  'A' | 'B' | 'C' | 'D' | 'E' | 'H' | 'I' | 'J' | 'K' | 'L' |
'O' | 'P' | 'Q' | 'R' | 'S' | 'V' | 'W' | 'X' | 'Y' | 'Z' | 'a' | 'b'
| 'c' | 'd' | 'e' | 'h' | 'i' | 'j' | 'k' | 'l' | 'o' | 'p' | 'q' |
'r' | 's' | 'v' | 'w' | 'x' | 'y' | 'z' 'F' | 'G' | 'M' | 'N' | 'T' |
'U' | 'f' | 'g' | 'm' | 'n' | 't' | 'u';

我更喜欢写,更简单,letter = [a..z]|[A..Z];

我的问题是:以这种形式(使用正则表达式)定义 letter 会破坏 EBNF 的自我定义属性吗?

【问题讨论】:

    标签: computer-science dsl bnf ebnf


    【解决方案1】:

    为此使用特殊序列:

    特殊序列由特殊序列符号组成 接着是一个(可能是空的)特殊序列 序列字符后跟特殊序列 符号。

    由特殊序列表示的符号序列 超出了本标准的范围。只有 特殊序列的格式在本国际中定义 标准。特殊序列为 用户可能需要的扩展。

    W3C 广泛使用它。例如:

    XML 的形式语法在本规范中使用简单的扩展巴科斯-瑙尔格式 (EBNF) 表示法给出。语法中的每条规则都定义一个符号,形式为 符号 ::= 表达式 如果符号是常规语言的开始符号,则以大写字母开头,否则以小写字母开头。文字字符串被引用。 在规则右侧的表达式中,以下表达式用于匹配一个或多个字符的字符串: #xN 其中 N 是十六进制整数,表达式匹配 ISO/IEC 10646 中编号(代码点)为 N 的字符。#xN 形式中的前导零的数量无关紧要。 [a-zA-Z],[#xN-#xN] 匹配具有指定范围(包括)范围内的值的任何 Char。 [abc],[#xN#xN#xN] 与枚举字符中具有值的任何 Char 匹配。枚举和范围可以混合在一组括号中。 [^a-z], [^#xN-#xN] 匹配任何值超出指定范围的 Char。 [^abc], [^#xN#xN#xN] 匹配任何值不在给定字符中的 Char。禁止值的枚举和范围可以混合在一组括号中。 “细绳” 匹配与双引号内给出的文字字符串匹配。 '细绳' 匹配与单引号内给出的文字字符串匹配。 可以组合这些符号以匹配更复杂的模式,如下所示,其中 A 和 B 表示简单的表达式: (表达) 表达式被视为一个单元,可以按照此列表中的说明进行组合。 一种? 匹配 A 或不匹配;可选 A。 甲乙 匹配 A 后跟 B。此运算符的优先级高于交替;因此 A B | C D 等同于 (A B) | (C D)。 一个 |乙 匹配 A 或 B。 A - B 匹配任何匹配 A 但不匹配 B 的字符串。 一个+ 匹配 A 的一次或多次出现。串联的优先级高于交替;因此 A+ | B+ 等同于 (A+) | (B+)。 一种* 匹配零次或多次出现的 A。串联的优先级高于交替;因此 A* | B* 等同于 (A*) | (B*)。 制作中使用的其他符号是: /* ... */ 评论。 [wfc:...] 良形约束;这通过名称标识了对与生产相关联的格式良好的文档的约束。 [ vc: ... ] 有效性约束;这通过名称标识对与生产相关的有效文档的约束。

    参考文献

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2021-06-03
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2014-06-10
      • 1970-01-01
      相关资源
      最近更新 更多