以下所有内容均参考 ISO/IEC 13211-1:1995。让我从里到外...
6.5.1 graphic char = ":";
graphic char = "-";
6.4.2 graphic token char = graphic char;
graphic token = graphic token char, { graphic token char };
name token = graphic token;
6.4 name = [ layout text sequence (* 6.4.1 *) ], name token;
6.3.1.3 atom = name;
6.5.3 open char = "(";
close char = ")";
comma char = ",";
6.4.8 open token = open char;
close token = close char;
comma token = comma char;
6.4.1 (* grammar rules for layout text sequence were omitted *)
6.4 comma = comma token;
open ct = open token;
close = [ layout text sequence ], close token;
6.3.3.1 arg = atom; (* if that atom is an operator *)
arg = term; (* otherwise: priority = 999 *)
6.3.3 arg list = arg;
arg list = arg, comma, arg list;
6.3.3 term = atom, open ct, arg list, close ;
所以我们回到最初的问题:
这些圆括号曾经是必要的。但是今天,它们不再需要了。为什么不再需要它们?标准如何应对这种情况?
让我们假设T = op(1200,fx,:-)
成立。
T
是在功能符号中提供的复合术语。
T
被上述规则覆盖term = atom, open ct, arg list, close;
atom
匹配op
,它是 的函子T
。
open ct 匹配一个左括号。
“中间部分”( 的参数T
)包含在 的语法规则中arg list
。
arg list
是 的非空列表arg
。
是什么arg
?
close 匹配右括号。
报价:
参数(arg
在语法规则中由,其优先级应小于','(逗号)运算符的优先级,以便逗号作为中缀运算符和逗号作为参数或列表元素分隔符之间没有冲突。
笔记:
“参数”的这个概念确保f(x,y)
f(:-, ;, [:-, :-|:-])
无论当前定义的运算符定义如何,术语和语法都是有效的。逗号不是原子,以下“术语”有语法错误:f(,,a)
、[a,,|v]
和[a,b|,]
; 但以下两个术语在语法上是有效的:f(',',a)
、[a,','|v]
和[a,b|',']
.