gpt4 book ai didi

parsing - 扩展的巴科斯诺尔形式 (EBNF) 能否描述一组无序的值?

转载 作者:行者123 更新时间:2023-12-03 21:35:34 28 4
gpt4 key购买 nike

我想使用扩展巴科斯-诺尔形式 (EBNF) 上下文无关语法定义一组无序的值。在 EBNF 中定义一个无序列表的值很容易,例如:

value = 'A' | 'B' | 'C';
list = value, {',', value};

但是,我怀疑它是否可以用于无序集合。

以下是有效的无序值集的示例:
A, B, C, D
A, B, D, C
A, D, C, B
...
D, C, B, A

虽然无效列表将是:
A, A, C, D
B, C, C, B
A, A, A, A
...

或任意长度的列表。
A, A, B, C, D, A
A, B, C, D, A, B, C, D
...

最佳答案

您可以在 EBNF 中定义无序集,但只能通过列出所有可能的枚举来定义。这对于大于大约两个元素的集合是不切实际的。

The standard -- 在 EBNF 是一种标准化符号的范围内 -- 允许您使用英语(或您觉得舒服的任何其他语言)来描述无法以其他方式描述的序列。例如,EBNF 的 EBNF 包括以下产生式:

syntactic exception
= ? a syntactic-factor that could be replaced
by a syntactic-factor containing no
meta-identifiers
? ;

同样,您可以编写如下内容:
value = 'A' | 'B' | 'C';
list = value, {',', value};
set = ? a "list" where all "value"s are unique ? ;

也许
set = ? a "list" with exactly three values
where all "value"s are unique
? ;

这对于构建解析器生成器没有多大用处,但它可能对理解与您相同语言的人类读者有所帮助。

对于真正的解析器生成器,一个常见的策略是允许任何可能包含重复元素的列表,然后在语义分析期间拒绝无效列表。 (甚至更早。这不是一个困难的分析。)

关于parsing - 扩展的巴科斯诺尔形式 (EBNF) 能否描述一组无序的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24030128/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com