ISO/IEC JTC1 SC22 WG17
Conformity Assessment I: Syntax

(see also all documents, number_chars/2)

The Query entry below including a newline character at the end is sent as input to read(X),X. or read(X),X, read(Y),Y. For queries marked /**/ the preceding query which does not start with /**/ must be executed first.

In all cases where a syntax error is required, an implementation may provide some value as an implementation specific extension due to 5.5.1. However, it turns out that those extensions are frequently incompatible between systems.

Full compliance as well as minor deviations or various valid interpretations of the standard are green.

read/1 is used to read the entire given text. Sometimes, read/1 needs further input or EOF to finish. Such differences are labeled as

Some of the queries below assume that the processor character set (6.5) contains the same collating sequence integers (6.6) as ASCII.

#
 
Query 13211-1:1995
*: Cor. 2
IF
V5.1B
SWI
6.3.0-54
YAP
6.3.2
B
7.5#9
GNU
1.4.0
SICStus
3.12.5iso
MINERVA
2.4
XSB
3.3.1
Ciao
1.13.0
conformance 239/243 187 177 167 183 243 188 134 119 170
recent improvements 5 30 36 63 34 1
misinterpretations 21 31 25 14 0 11 16 63 29
rejections 14 4 7 14 0 4 10 18 1
write syntax deviations 4 1 2 3 4 0 16 12 13 3
extensions 20 29 41 28 0 24 16 29 40
write_canonical/1 OK yes #18 #227 #227 #172 yes #18 #18 #1, #172 #1
writeq/1 OK #33 #135 #156 #150 #18 yes #27 #135 #1 #1
1 writeq('\n'). '\n' OK OK OK OK OK OK OK '
'
'
'
2 ' syntax err. OK waits waits waits/OK OK waits OK waits waits
3 ) waits sy._e.(..) OK OK OK OK OK OK OK OK
4 . syntax err. OK OK OK OK OK new OK OK OK OK
5 writeq(' '). % horiz. tab syntax err. '\t' '\t' '\t' '\t' OK new OK '\t' ' ' ' '
177 0'\t=0' . % horiz. tab syntax err. succeeds succeeds succeeds succeeds OK new OK succeeds fails succeeds
6 writeq('
').
syntax err. OK '\n' '\n' '\n' OK OK OK '
'
'
'
7 writeq('\
'). % "\\\n"
'' OK OK new sy._e.(..) OK new OK OK sy._e.(..) OK OK
8 writeq('\
a'). % "\\\na"
a OK OK OK new OK new OK OK sy._e.(..) OK OK
9 writeq('a\
b'). % "a\\\nb"
ab OK OK OK OK new OK OK sy._e.(..) OK OK
10 writeq('a\
 b'). % "a\\\n b"
'a b' OK ab ab OK new OK OK sy._e.(..) ab OK
11 writeq('\ '). syntax err. OK OK new ' ' OK new OK OK OK '\ ' ''
193 writeq('\
'). % "\\ \n"
syntax err. OK OK new ' \n' OK new OK OK XXX '\
'
'
'
12 writeq('\ '). % "\\\t" syntax err. OK OK new '\t' OK new OK OK OK '\ ' ''
13 writeq('\t'). '\t' OK OK OK OK OK OK OK ' ' ' '
14 writeq('\a'). e.g. '\a' or '\7\' OK OK OK OK OK OK '\u0007' '' ''
15 writeq('\7\'). e.g. '\a' or '\7\' OK OK OK new OK OK OK '\u0007' '\' ''
16 writeq('\ca'). syntax err. OK a c OK new OK OK OK '\ca' a
241 writeq('\d'). syntax err. OK OK '\177' OK OK '\d' XXX '\d' '??'
17 writeq('\e'). syntax err. '\e' '\033\' '\033\' new OK new OK '\e' '\u001b' '\e' '^['
18 writeq('\033\'). e.g. '\33\' or '\x1b\' '\e' '\033\' '\033 reg '^[' '\x1b\' '\e' '\u001b' '' '^['
19 char_code('\e',C). syntax err. C = 27 C = 27 C = 27 OK new OK C = 27 C = 27 fails C = 27
21 char_code('\d',C). syntax err. OK OK new C = 127 OK new OK C = 127 OK fails C = 127
22 writeq('\u1'). syntax err. OK OK OK new OK new OK OK OK '\u1' u1
23 X = 0'\u1. syntax err. OK OK new OK new OK OK OK OK OK OK
24 writeq(' syntax err. OK waits waits waits OK new waits OK waits waits
25 writeq(. syntax err. OK OK OK OK OK new OK OK OK OK
26 '\
''.
syntax err. OK waits waits new waits OK waits ex._e.(..) waits waits
210 X = 0'\. syntax err. OK waits waits OK OK new OK XXX X = 92. waits
211 X = 0'\. . syntax err. OK OK new X = 46. OK OK OK XXX X = 92. X = 46.
222 writeq((-)-(-)). (-)-(-) (-) - (-) (-)- (-) (-)- (-) OK OK OK XXX - - - OK
223 writeq(((:-):-(:-))). (:-):-(:-) (:-) :- (:-) (:-):- (:-) (:-):- (:-) OK OK (:-):- :- XXX (:- :- :-) (:-):- :-
27 writeq((*)=(*)). (*)=(*) (*) = (*) (*)= (*) (*)= (*) new OK new OK * = * 4.1 (*) = (*) * = * * = *
28 writeq([:-,-]). [:-,-] OK OK OK OK new OK OK [(:-),(-)] OK OK
29 writeq(f(*)). f(*) OK OK OK OK new OK OK f((*)) OK OK
30 writeq(a*(b+c)). a*(b+c) a * (b + c) a* (b+c) a* (b+c) OK OK OK a * (b + c) a * (b + c) OK
31 writeq(f(;,'|',';;')). f(;,'|',';;') OK OK OK OK new OK OK f((';'),'|',';;') f(';','|',';;') OK
32 writeq([.,.(.,.,.)]). ['.','.'('.','.','.')] OK OK OK OK new OK OK OK OK new OK
33 writeq((a :- b,c)). a:-b,c ** a :- b , c OK OK OK OK OK a :- b , c (a :- b ',' c) OK
34 write_canonical([a]). '.'(a,[]) 8.14.2.4 ex2 OK OK '.'(a, []) new OK new OK OK [a] [a] OK
35 writeq('/*'). '/*' OK OK OK new OK OK OK OK OK OK
203 writeq(//*). //* waits OK OK OK new OK OK XXX OK OK
36 writeq('/**'). '/**' OK OK OK new OK OK new OK OK OK OK
37 writeq('*/'). */ OK OK OK OK new OK new OK OK OK OK
38 "\'\`\"" = "'`""". % " succeeds syn. e. OK waits reg OK OK OK OK fails OK
179 "\'\"" = "'""". % " succeeds OK OK waits reg OK OK OK OK fails OK
178 "\`" = "`". succeeds syn. e. OK OK OK OK OK OK OK OK
39 '\'\`\"' = '''`"'. succeeds syn. e. OK waits reg OK OK OK OK waits OK
40 writeq('\'\`\"\"'). e.g. '\'`""' syn. e. OK waits reg OK '''`""' OK '\'`\"\"' waits '''`""'
41 ('\\') = (\). succeeds OK OK OK OK OK OK OK OK OK
42 op(1,xf,xf1).
1xf1 = xf1(1).
succeeds OK OK new OK OK OK OK OK OK OK
43 X = 0X1. syntax err. OK OK OK new OK OK new OK OK OK OK
44 float(.0). syntax err. OK OK OK OK new OK OK OK succeeds OK
45 op(100,xfx,.).
functor(3 .2,F,A).
F = (.), A = 2. OK OK OK OK new OK OK OK sy._e.(...) OK
46 float(- .0). syntax err. OK OK fails OK new OK OK OK succeeds OK
47 float(1E9). syntax err. succeeds succeeds succeeds OK OK OK succeeds OK OK
48 integer(1e). syntax err. succeeds OK OK OK OK OK OK OK OK
49 op(9,xf,e9).
1e9 = e9(1).
succeeds fails fails fails OK OK OK fails OK OK
50 op(9,xf,e).
1e-9 = -(e(1),9).
succeeds fails fails fails OK OK OK fails OK OK
51  /**/ 1.0e- 9 = -(e(1.0),9). succeeds fails OK OK sy._e.(..) OK OK OK sy._e.(..) OK
204  /**/ writeq(1e). e.g. 1 e 1 OK OK OK OK OK XXX OK OK
220  /**/ writeq(1.0e). e.g. 1.0 e 1.0 OK OK sy._e.(..) OK OK XXX sy._e.(..) OK
52 op(9,xfy,e).
1.2e 3 = e(X,Y).
X = 1.2, Y = 3. sy._e.(..) OK new OK sy._e.(..) OK OK OK sy._e.(..) OK
53 writeq(1.0e100). e.g. 1.0e+100 OK OK new OK new OK OK OK OK OK OK
54 float(1.0ee9). syntax err. OK OK OK OK new OK OK OK OK OK
56 integer(- 1). succeeds OK fails OK OK OK new OK OK OK OK
57 integer('-'1). succeeds fails fails OK OK OK OK OK OK OK
58 integer('-' 1). succeeds fails fails OK OK OK new OK OK OK OK
59 integer(- /**/1). succeeds OK fails OK OK OK new OK OK OK OK
60 integer(-/**/1). syntax err. succeeds OK OK OK OK OK OK OK OK
61 integer('-'/**/1). succeeds fails fails OK OK OK new OK OK OK OK
62 atom(-/**/-). succeeds fails OK OK OK OK OK OK OK OK
63 op(0,fy,-). succeeds OK OK OK OK OK OK OK OK OK
180  /**/ integer(-1). succeeds OK OK OK new OK OK OK OK OK OK
64  /**/ integer(- 1). succeeds OK sy._e.(..) OK new OK OK new OK OK OK OK
135 writeq(-(1)). - (1) - 1 - 1 OK new OK new OK new -(1) - 1 -1 -(1)
136 op(0,fy,-),writeq(-(1)). -(1) OK OK OK OK new OK OK OK -1 OK
182 writeq(-(-1)). - -1 OK - -1 OK new - (-1) OK -(-1) OK --1 -(-1)
183 writeq(-(1^2)). - (1^2) or - (1)^2 - 1 ^ 2 - 1^2 - (1)^2 new - (1^2) new - (1^2) new -(1^2) - 1 ^ 2 -(1 ^ 2) -1^2
139 writeq(-((a,b))). - (a,b) ** - (a , b) OK new OK new OK new OK -((a,b)) - (a , b) -(a ',' b) OK
218 writeq(-(1*2)). - (1*2) - (1 * 2) OK new OK - ( (1*2)) OK -(1*2) XXX -(1 * 2) OK
140 writeq(-a). -a - a OK OK OK new OK -(a) - a OK OK
184 writeq(-(-)). - (-) OK OK new OK new -(-) OK -(-) OK -- OK
185 writeq(-[-]). -[-] - [-] OK OK OK new OK -([-]) - [(-)] OK OK
188 writeq(-p(c)). -p(c) - p(c) OK OK OK new OK -(p(c)) - p(c) OK OK
189 writeq(-{}). -{} - {} OK OK - {} OK -({}) - {} -'{}' OK
190 writeq(-{a}). -{a} ** - {a} OK OK OK new OK -({a}) - {}(a) ** OK OK
191 writeq(-(-a)). - -a. - - a. OK OK OK new OK -(-(a)) XXX -(-a) OK
192 writeq(-(-(-a))). - - -a. - - - a. OK OK OK new OK -(-(-(a))) XXX -(-(-a)) OK
216 writeq(-(-(1))). - - (1) - - 1 - - 1 OK new - (- (1)) OK -(-(1)) XXX -(-1) - -(1)
215 op(100,yfx,~).
writeq(-(1~2~3)).
- (1~2~3) or - (1)~2~3 - 1 ~ 2 ~ 3 - 1~2~3 - (1)~2~3 new - (1~2~3) new - (1~2~3) new -(1~2~3) XXX -1 ~ 2 ~ 3 -1~2~3
55 op(1,yf,yf1).
{-1 yf1}={yf1(X)}.
X = -1. OK OK OK OK OK OK sy._e.(..) OK OK
65 compound(+1). succeeds * OK fails OK new OK OK fails OK with op OK OK
66 compound(+ 1). succeeds * OK OK OK new OK OK fails OK with op OK OK
67 op(0,fy,+).
compound(+1).
syntax err. OK fails OK OK new OK fails OK succeeds OK
68 [(:-)|(:-)]=[:-|:-]. succeeds OK OK OK OK OK new OK OK OK OK
69 X=[a|b,c]. syntax err. X=[a|(b,c)] OK OK OK OK OK OK OK OK
70 op(1000,xfy,','). p._e.(m.,op.,',') OK OK OK OK OK OK succeeds OK succeeds
71 op(1001,xfy,','). p._e.(m.,op.,',') or
p._e.(c.,op.,',')
OK OK OK OK OK OK succeeds OK OK
72 op(999,xfy,'|'). p._e.(c., op.,'|') * succeeds OK OK p._e.(m.,op.,'|') OK new succeeds succeeds succeeds succeeds
73  /**/ X=[a|b]. X=[a|b]. OK OK OK OK OK OK OK OK X=[(a|b)]
219  /**/ [a|[]]=[a]. succeeds OK OK OK OK OK OK XXX OK fails
74  /**/ X=[a|b|c]. syntax err. X=[a|(b|c)] OK OK OK OK OK OK OK X=[(a|b|c)]
75 var(a:-b). syntax err. OK fails OK OK OK OK OK OK OK
76 :- = :- . syntax err. OK OK OK succeeds OK succeeds OK OK succeeds
77 - = - . syntax err. OK succeeds OK succeeds OK succeeds OK succeeds succeeds
78 * = * . syntax err. succeeds succeeds succeeds succeeds OK succeeds succeeds succeeds succeeds
79 current_op(200,fy,-). succeeds OK OK OK new OK OK OK OK fails OK
80 current_op(200,fy,+). succeeds * OK OK OK new OK OK OK fails fails OK
81 {- - c}={-(-(c))}. succeeds OK OK OK OK new OK OK OK fails OK
82 (- -) = -(-). syntax err. succeeds succeeds succeeds succeeds OK succeeds succeeds OK succeeds
83 (- - -) = -(-(-)). syntax err. succeeds succeeds succeeds succeeds OK succeeds succeeds fails succeeds
84 (- - - -) = -(-(-(-))). syntax err. succeeds succeeds succeeds succeeds OK succeeds succeeds OK succeeds
85 {:- :- c} = {:-(:-,c)}. syntax err. OK OK succeeds succeeds OK succeeds OK OK succeeds
86 {- = - 1}={(-(=)) - 1}. syntax err. succeeds fails succeeds succeeds OK succeeds succeeds fails succeeds
87 write_canonical((- = - 1)). syntax err. -(-(=),1) =(-,-(1)) -(-(=),1) -(-(=),1) OK -(-(=),1) -(-(=),1) =(-,-1) -(-(=),1)
88 write_canonical((- = -1)). syntax err. -(-(=),1) =(-,-1) -(-(=),1) -(-(=),1) OK -(-(=),1) -(-(=),1) =(-,-1) -(-(=),1)
89 write_canonical((-;)). syntax err. OK OK -(;) -(;) OK -(;) -(';') -(';') -(;)
90 write_canonical((-;-)). syntax err. ;(-,-) ;(-,-) OK ;(-,-) OK ;(-,-) OK OK ;(-,-)
91 write_canonical((:-;-)). syntax err. ;(:-,-) OK OK ;(:-,-) OK ;(:-,-) OK OK ;(:-,-)
92 [:- -c] = [(:- -c)]. syntax err. OK succeeds fails fails OK fails OK OK fails
93 writeq([a,b|,]). syntax err. OK [a,b|','] OK OK OK OK OK OK OK
94 X ={,}. syntax err. OK X = {','}. OK OK OK OK OK OK OK
95 {1} = {}(1). succeeds OK OK OK OK new OK OK OK sy._e.(..) OK
96 write_canonical({1}). {}(1) OK OK OK OK new OK OK OK '{}'(1) OK
97 '[]'(1) = [ ](X). X = 1 OK OK OK OK new OK OK OK sy._e.(..) OK
98 X = [] (1). syntax err. OK OK X = [](1) OK OK OK OK OK X = [](1)
99 op(100,yfy,op). do._e.(op._sp.,yfy) OK OK new OK OK OK OK succ./no eff. OK OK
100 '''' = '\''. succeeds OK OK waits reg OK OK OK OK waits OK
101 a = '\141\'. succeeds OK OK OK new OK new OK OK OK fails OK
102 a = '\141'. syntax err. OK succeeds OK new OK OK OK OK succeeds waits
103 X = '\141\141'. X = a141 OK OK OK new OK new OK OK OK X = aa OK
104 X = '\9'. syntax err. OK OK new X = '9' OK new OK OK OK X = '\\9' X = '9'
105 X = '\N'. syntax err. OK OK new X = 'N' OK new OK OK waits X = '\\N' X = 'N'
106 X = '\\' . syntax err. X = (\) X = (\) X = (\) X = (\) OK new X = (\) X = (\) X = (\) X = (\)
107 X = '\77777777777\'. syntax/repr. err. OK OK new OK new OK new OK OK OK X = ... halts
108 a = '\x61\'. succeeds OK OK fails reg OK OK OK OK fails OK
109 atom_codes('\xG\',Cs). syntax err./waits OK waits Cs = [256] OK OK new OK waits Cs = [] halts
110 atom_codes('\xG1\',Cs). syntax err./waits OK waits OK new OK OK new waits waits Cs = [] Cs = [1]
111 atom(`). syntax err. succeeds succeeds succeeds succeeds OK new waits OK succeeds succeeds
112 atom(`+). syntax err. succeeds succeeds succeeds succeeds OK new waits OK succeeds succeeds
113 X = `a`. succeeds sy._e.(..) waits waits sy._e.(..) X = 'a' X = 'a' OK waits waits
114 integer(0'\'). succeeds OK OK new OK OK OK OK OK OK OK
115 integer(0'''). succeeds OK OK new sy._e.(..) OK OK OK OK OK OK
116 0''' = 0'\'. succeeds OK OK new sy._e.(..) OK new OK OK OK fails OK
117 integer(0''). syntax err. OK succeeds succeeds OK new OK new OK OK succeeds succeeds
195 op(100,xf,''). succeeds OK OK OK OK OK OK XXX OK OK
205  /**/ (0 '') = ''(X). X = 0. OK OK OK OK OK OK XXX OK OK
196  /**/ writeq(0 ''). 0'' or 0 '' 0 '' 0 '' 0'' 0 '' new 0 '' 0 '' XXX 0 0 ''
197  /**/ writeq(0''). 0'' or 0 '' sy._e.(..) 39 39 sy._e.(..) OK new sy._e.(..) XXX 39 39
118 op(100,xfx,''). succeeds OK OK OK OK OK OK OK OK OK
119  /**/ functor(0 ''1, F, A). F = (''), A = 2. OK OK OK OK OK OK OK OK OK
120  /**/ functor(0''1, F, A). F = (''), A = 2. sy._e.(..) sy._e.(..) sy._e.(..) F= -1, A=0 OK new sy._e.(..) sy._e.(..) sy._e.(..) sy._e.(..)
206 op(100,xf,f).
writeq(0'f').
syntax err. OK waits waits 102 OK waits XXX 102 waits
207  /**/ writeq(0'f'f'). e.g. 102 f OK OK OK syn. e. OK OK XXX waits OK
209  /**/ writeq(0'ff). e.g. 102 f OK OK OK OK OK OK XXX OK OK
208 op(100,xf,'f ').
writeq(0 'f ').
0 'f ' OK OK OK OK new OK new OK XXX OK OK
121 X = 2'1. syntax err. OK X = 1 X = 1 X = 1 OK new waits OK X = 1 X = 1
122 op(100,xfx,'1').
functor(2'1'y, F, A).
F = ('1'), A = 2. OK waits waits sy._e.(..) OK OK OK sy._e.(..) waits
123 X =0'\x41\ . X = 65 repr. error OK sy._e.(..) OK new OK OK OK fails OK
124 X =0'\x41\. X = 65 repr. err. waits waits OK new OK OK OK waits OK
125 X =0'\x1\. X = 1 repr. err. waits waits OK new OK OK OK waits OK
127 X is 16'mod'2. X = 0 OK OK new ty._e.(..) sy._e.(..) OK OK OK waits OK
128 X is 37'mod'2. X = 1 OK OK new sy._e.(..) t._a.(..) OK OK OK sy._e.(..) OK
129 X is 0'mod'1. syntax err. waits waits waits OK OK new waits OK waits waits
130 X is 1'+'1. X = 2 OK OK new ty._e.(..) reg sy._e.(..) OK OK OK sy._e.(..) OK
212 X is 1'\
+'1.
X = 2. OK OK sy._e.(..) waits OK OK XXX sy._e.(..) OK
213 X is 0'\
+'1.
X = 1. repr. err. waits waits sy._e.(..) OK new sy._e.(..) XXX sy._e.(..) waits
214 X is 0'\ waits repr. err. OK OK OK OK sy._e.(..) XXX OK OK
126 X = 0'\
.
syntax err. repr. err. OK new X = -1 reg waits OK OK OK waits waits
131 op(100,fx,' op'). succeeds OK OK OK OK OK OK OK OK OK
132  /**/ writeq(' op' '1'). ' op' '1' OK OK new OK ' op' '1' OK OK OK OK OK
133  /**/ writeq(' op'[]). ' op'[] ' op' [] OK ' op' [] ' op' [] OK OK ' op' [] ' op' [] OK
134 op(1,xf,xf1).
writeq({- =xf1}).
syntax err. {- (=) xf1} { (-)= (xf1)} {- (=)xf1} {-((=)xf1)} OK {-(=xf1)} {}(- (=) xf1) {- = xf1} {- =xf1}
137 writeq(- (a*b)). - (a*b) - (a * b) OK new OK OK new OK -(a*b) - (a * b) -(a * b) OK
138 writeq(\ (a*b)). \ (a*b) \ (a * b) OK OK OK new OK OK \ (a * b) \(a * b) OK
141 current_op(P,xfy,.). fails OK OK P = 999 OK new OK OK OK P = 661 OK
142 op(400,xfy,.). succeeds OK OK OK OK new OK OK OK OK OK
143  /**/ writeq(1 .2). [1|2] OK OK OK OK new OK OK 1 '.' 2 syn. e. OK
144  /**/ writeq([1]). [1] OK OK OK OK OK OK 1 '.' [] OK OK
221  /**/ X = 1.e. X = [1|e]. OK OK OK OK OK OK XXX OK OK
145 write_canonical('$VAR'(0)). '$VAR'(0) OK OK new OK OK OK OK OK OK OK
146 write_term('$VAR'(0),[]). $VAR(0) OK OK OK A OK new OK OK $VAR( 0) OK
147 op(9,fy,fy),op(9,yf,yf).
write_canonical(fy 1 yf).
fy(yf(1)) OK yf(fy(1)) OK OK OK OK syn. e. OK OK
148  /**/ write_canonical(fy yf). syntax err. fy(yf) fy(yf) fy(yf) fy(yf) OK fy(yf) fy(yf) yf(fy) fy(yf)
149  /**/ writeq(fy(yf(1))). fy 1 yf OK OK OK OK OK OK fy yf(1) OK OK
150  /**/ writeq(yf(fy(1))). (fy 1)yf (fy 1) yf fy 1 yf fy 1 yf OK OK OK yf(fy 1) fy 1 yf OK
151 op(9,fy,fy),op(9,yfx,yfx).
write_canonical(fy 1 yfx 2).
fy(yfx(1,2)) OK yfx(fy(1),2) OK OK OK OK yfx(fy(1),2) OK OK
152  /**/ writeq(fy(yfx(1,2))). fy 1 yfx 2 OK OK OK OK OK OK OK OK OK
153  /**/ writeq(yfx(fy(1),2)). (fy 1)yfx 2 (fy 1) yfx 2 fy 1 yfx 2 fy 1 yfx 2 OK OK OK fy 1 yfx 2 fy 1 yfx 2 OK
154 op(9,yf,yf),op(9,xfy,xfy).
write_canonical(1 xfy 2 yf).
xfy(1,yf(2)) OK yf(xfy(1,2)) OK OK OK OK syn. e. OK OK
155  /**/ writeq(xfy(1,yf(2))). 1 xfy 2 yf OK OK OK OK OK OK 1 xfy yf(2) OK OK
156  /**/ writeq(yf(xfy(1,2))). (1 xfy 2)yf (1 xfy 2) yf 1 xfy 2 yf 1 xfy 2 yf OK OK OK yf(1 xfy 2) 1 xfy 2 yf OK
157 op(0,xfy,:-),
current_op(P,xfx,:-).
fails OK OK OK p._e.(m.,op.,:-) OK OK OK P = 1200 OK
158 op(0,xfy,','). p._e.(m.,op.,',') OK OK OK OK OK OK succ./no eff. OK OK
159 op(9,fy,f),op(9,yf,f).
write_canonical(f f 0).
f(f(0)) OK OK OK OK OK OK OK syn. e. OK
201  /**/ writeq(f(f(0))). e.g. f f 0 or 0 f f f f 0 f f 0 f f 0 0 f f f f 0 0 f f XXX f f 0 0 f f
202  /**/ write_canonical(f 0 f). f(f(0)) OK OK OK OK OK OK XXX OK OK
160  /**/ write_canonical(0 f f). f(f(0)) OK OK OK OK OK OK syn. e. OK OK
161  /**/ write_canonical(f f). syntax err. f(f) f(f) f(f) f(f) OK f(f) XXX f(f) f(f)
162 op(9,fy,p),op(9,yfx,p).
write_canonical(1 p p p 2).
syntax err. OK OK p(p(1,p),2) p(p(1,p),2) OK p(p(1,p),2) OK OK p(p(1,p),2)
163 op(9,fy,p),op(9,xfy,p).
write_canonical(1 p p p 2).
p(1,p(p(2))) OK OK OK OK OK OK OK OK OK
164 op(7,fy,p),op(9,yfx,p).
write_canonical(1 p p p 2).
p(1,p(p(2))) OK OK OK OK new OK OK OK p(p(1,p),2) OK
165 atom('.''-''.'). succeeds OK OK OK OK OK OK OK OK OK
166 op(0,xfy,'|'). succeeds OK OK OK new p._e.(m.,o.,'|') OK new OK OK OK OK
167  /**/ writeq((a|b)). syntax err. OK OK OK new a|b OK new a;b OK (a ';' b) OK
168 op(9,yf,.). succeeds OK OK OK OK new OK OK OK OK OK
169  /**/ writeq(.(.)). ('.')'.' ('.') '.' OK OK ('.') '.' new OK '.' '.' '.'('.') '.'. '.' '.'
194 writeq((.)+(.)). '.'+'.' '.' + '.' OK ('.')+('.') OK new OK OK XXX '.' + '.' OK
170 set_prolog_flag(
 double_quotes,chars).
succeeds OK OK OK OK OK OK OK d._e.(p.,d.). OK
171  /**/ writeq("a"). [a] OK OK OK OK OK OK OK [97] [97]
229  /**/ writeq("\z"). syntax err. OK OK [ÿ] OK OK OK XXX OK [122]
172 X is 10.0** -323, writeq(X). e.g. 1.0e-323. 9.8..e-324 1.0e-323 1.0e-323 new 0.0 9.8..e-324 1.0E-323 1.0E-323 0.0000 1.0e-323
173 1.0e-323=:=10.0** -323. succeeds re._e.(num.) OK new OK OK OK OK OK OK fails
174 -1 = -0x1. succeeds OK OK OK OK OK OK OK OK OK
175 T = t(0b1,0o1,0x1). T = t(1,1,1) OK OK OK OK OK OK OK OK OK
176 X is 0b1mod 2. X = 1 OK OK OK OK OK OK OK OK OK
217 op(1105,xfy,'|'). succeeds OK OK OK p._e.(m.,o.,'|') OK OK XXX OK OK
181  /**/ writeq((a-->b,c|d)). a --> b, c | d * ** a --> b , c '|' d a-->b,c|d new a-->b,c|d new a-->b,c|d a-->b,c|d a-->b,c;d syn. e. (a --> b ',' c ';' d) a-->b,c | d
186 X/* /*/=7. X = 7 OK waits OK new OK OK OK OK OK OK
187 X/*/*/=7. X = 7 OK waits OK new OK OK OK OK OK OK
198 atom($-). OK OK OK OK OK OK OK XXX OK OK
199 atom(-$). succeeds OK OK OK fails OK OK XXX OK OK
200 op(900, fy, [$]).
write_canonical($a+b).
$(+(a,b)) OK OK OK +('$a',b) OK OK XXX OK OK
224 \ . ex._e.(..) OK OK OK OK OK OK XXX OK OK
225 char_code(C,0), writeq(C). '\0\' or rep._e. rep._e. '\000\' '' rep._e. rep._e. '\x0\' XXX '' de._e.
226 write_canonical(_+_). e.g. +(_1,_2) +(_164,_165) +(_,_) +(_,_) +(_2f0,_314) +(_17,_18) +(_430,_448) XXX +(_h164,_h173) +(_5692,_5705)
227 write_canonical(B+B). e.g. +(_1,_1) +(_164,_164) +(A,A) +(A,A) +(_2f0,_2f0) +(_17,_17) +(_430,_430) XXX +(_h164,_h164) +(_5692,_5692)
228 writeq(0'\z). syntax err. OK OK -1 OK OK OK XXX OK 122
230 char_code('\^',X). syntax err. OK OK OK OK OK OK XXX fails X = 94
231 writeq(0'\c). syntax err. OK 99 OK OK OK OK XXX OK OK
232 writeq(0'\ ). syntax err. OK OK 32 OK OK OK XXX 92 OK
233 writeq(nop (1)). syntax err. OK OK OK OK OK OK XXX OK OK
234 op(400,fx,f).
writeq(f/**/(1,2)).
f (1,2) OK OK OK OK OK OK XXX f (1 ',' 2) OK
235  /**/ writeq(1 = f). syntax err. 1 = (f) 1= (f) 1= (f) 1=(f) OK 1=(f) XXX 1 = f 1=(f)
236 write_canonical(a- - -b). -(a,-(-(b))) OK OK OK OK OK OK XXX -(-(a,-),b) OK
237 op(699,xf,>). p._e.(c.,op,>) OK succeeds succeeds succeeds OK succeeds XXX succeeds succeeds
238  /**/ writeq(>(>(a),b)). >(a)>b >(a) > b a> > b a> >b (a>)>b >(a)>b (a>)>b XXX a> > b (a>)>b
239  /**/ write_canonical(a> >b). syntax err. OK syntax err. >(>(a),b) syntax err. OK >(>(a),b) XXX syntax err. >(>(a),b)
242  /**/ write_canonical(a> =b). syntax err. OK syntax err. =(>(a),b) syntax err. OK =(>(a),b) XXX syntax err. =(>(a),b)
243  /**/ write_canonical((a>,b)). syntax err. OK ','(>(a),b) ','(>(a),b) syntax err. OK ','(>(a),b) XXX syntax err. ','(>(a),b)
240  /**/ write_canonical((a>). syntax err. OK >(a) >(a) syntax err. OK >(a) XXX syntax err. >(a)
244 Finis (). syntax err. OK OK OK OK OK OK XXX OK OK
Remarks:
/**/requires preceding test without /**/
* including Cor. 2 (from approved DTC2)
** including/ignoring yet to be written DTC3
XXXlicense expired
@@@not yet tested (difficult reproduction)
4.1 allegedly fixed in SICStus 4.1. But present in 4.2
#71 There are two possible errors:
permission_error(modify, operator, ',') due to 8.14.3.3 j
permission_error(create, operator, ',') due to 8.14.3.3 l which applies because Priority 1001 for comma is invalid due to 6.3.4.3.

Deleted cases

20: Subsumed by #18

8.14.1.1 defines when a syntax error may be produced. There are actually two possibilities: Syntax errors on the token level and on the syntax level. Syntax level errors may only be produced when an end token (6.4.8) is encountered.

Version Control


Validated HTML