Tutto quanto segue si riferisce a ISO/IEC 13211-1: 1995. Lasciatemi muovo dentro e fuori ...
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 ;
Così torniamo alla domanda iniziale:
Queste parentesi tonde usato essere necessario. Ma oggi non sono più necessari. Perché non sono più necessari? In che modo lo standard fa fronte a questa situazione?
Supponiamo che T = op(1200,fx,:-)
resti.
T
è un termine composto disponibile in notazione funzionale.
T
è coperto dalla regola sopra term = atom, open ct, arg list, close;
atom
partite op
, che è il funtore di T
.
open ct corrisponde a una parentesi aperta.
la "parte centrale" (gli argomenti di T
) è coperto dalle regole grammaticali per arg list
.
arg list
è un elenco non vuoto di arg
.
Che cos'è arg
?
un termine con priorità inferiore a 1000, la priorità di (',')/2. Ad es., 1200
e fx
.
un atomo che è un operatore. (Nessuna stringa allegata!)
chiudere corrisponde a una parentesi di chiusura.
quotazioni:
Un argomento (rappresentanti arg
nelle regole sintattiche avviene come argomento di un termine composti ai o elemento di un elenco Può essere un atomo che è un operatore, o. un termine con priorità non superiore a 999. Quando un argomento è un termine arbitrario, la sua priorità deve essere inferiore alla priorità dell'operatore ',' (virgola) in modo che non vi sia conflitto tra virgola come operatore infisso e virgola come argomento o elenco separatore di elementi
Nota:
Questa concetto di "argomento" garantisce che sia i termini f(x,y)
e f(:-, ;, [:-, :-|:-])
sono sintatticamente valido definizioni qualunque operatore sono attualmente definite. Virgola non è un atomo e i seguenti "termini" hanno errori di sintassi: f(,,a)
, [a,,|v]
e [a,b|,]
; ma i seguenti due termini sono sintatticamente validi: f(',',a)
, [a,','|v]
e [a,b|',']
.