xref: /inferno-os/doc/limbo/synsum (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1.s1
2program:
3	Cimplement Iidentifier-listC ; Itop-declaration-sequence
4.s2
5.s1
6top-declaration-sequence:
7	top-declaration
8	top-declaration-sequence top-declaration
9.s2
10.s1
11top-declaration:
12	declaration
13	identifier-listC := IexpressionC ;I
14	identifier-listC = IexpressionC ;I
15	C( Iidentifier-listC ) := IexpressionC ;I
16	module-declaration
17	function-definition
18	adt-declaration
19.s2
20.s1
21declaration:
22	identifier-listC : ItypeC ;I
23	identifier-listC : ItypeC = IexpressionC ;I
24	identifier-listC : con IexpressionC ;I
25	Iidentifier-listC : import Iidentifier C;I
26	identifier-listC : typeI typeC ;I
27	identifier-listC : exceptionI tuple-typeO
28	Cinclude Istring-constantC ;I
29.s2
30.s1
31identifier-list:
32	identifier
33	identifier-listC , Iidentifier
34.s2
35.s1
36expression-list:
37	expression
38	expression-listC , Iexpression
39.s2
40.s1
41type:
42	data-type
43	function-type
44.s2
45.s1
46data-type:
47	CbyteI
48	CintI
49	CbigI
50	CrealI
51	CstringI
52	tuple-type
53	Carray of Idata-type
54	Clist of Idata-type
55	Cchan of Idata-type
56	adt-type
57	Cref Iadt-type
58	Cref Ifunction-type
59	module-type
60	module-qualified-type
61	type-name
62.s2
63.s1
64tuple-type:
65	C( Idata-type-listC )I
66.s2
67.s1
68data-type-list:
69	data-type
70	data-type-list C,I data-type
71.s2
72.s1
73adt-type:
74	identifier
75	module-qualified-type
76.s2
77.s1
78module-type:
79	identifier
80.s2
81.s1
82module-qualified-type:
83	identifier C->I identifier
84.s2
85.s1
86type-name:
87	identifier
88.s2
89.s1
90function-type:
91	Cfn Ifunction-arg-ret
92.s2
93.s1
94function-arg-ret:
95	C( Iformal-arg-listOC ) IraisesO
96	C( Iformal-arg-listOC ) : Idata-type raisesO
97.s2
98.s1
99formal-arg-list:
100	formal-arg
101	formal-arg-listC , Iformal-arg
102.s2
103.s1
104formal-arg:
105	nil-or-ID-listC : Itype
106	nil-or-IDC : self refO Iidentifier
107	nil-or-IDC : self Iidentifier
108	C*I
109.s2
110.s1
111nil-or-ID-list:
112	nil-or-ID
113	nil-or-ID-list C, Inil-or-ID
114.s2
115.s1
116nil-or-ID:
117	identifier
118	CnilI
119.s2
120.s1
121raises:
122	Craises ( Inil-or-ID-listC )I
123	CraisesI nil-or-ID
124.s2
125.s1
126module-declaration:
127	IidentifierC : module { Imod-member-listOC } ;I
128.s2
129.s1
130mod-member-list:
131	mod-member
132	mod-member-list mod-member
133.s2
134.s1
135mod-member:
136	identifier-listC : Ifunction-typeC ;I
137	identifier-listC : Idata-typeC ;I
138	adt-declarationC I
139	identifier-listC : con Iexpression C;I
140	identifier-listC : type Itype C;I
141.s2
142.s1
143adt-declaration:
144	IidentifierC : adt { Iadt-member-listOC } ;I
145.s2
146.s1
147adt-member-list:
148	adt-member
149	adt-member-list adt-member
150.s2
151.s1
152adt-member:
153	identifier-listC : cyclicO  Idata-typeC ;I
154	identifier-listC : con  IexpressionC ;I
155	identifier-listC : Ifunction-typeC ;I
156	Cpick { Ipick-member-listC }I
157.s2
158.s1
159pick-member-list:
160	pick-tag-listC =>I
161	pick-member-list pick-tag-listC =>I
162	pick-member-list identifier-listC : cyclicO  Idata-typeC ;I
163.s2
164.s1
165pick-tag-list:
166	identifier
167	pick-tag-listC or Iidentifier
168.s2
169.s1
170function-definition:
171	function-name-part function-arg-retC { IstatementsC }I
172.s2
173.s1
174function-name-part:
175	identifier
176	function-name-partC . Iidentifier
177.s2
178.s1
179statements:
180	(empty)
181	statements declaration
182	statements statement
183.s2
184.s1
185statement:
186	expressionC ;I
187	C;I
188	C{ IstatementsC }I
189	Cif ( IexpressionC ) Istatement
190	Cif ( IexpressionC ) IstatementC else Istatement
191	labelO  Cwhile ( IexpressionOC ) Istatement
192	labelO  Cdo IstatementC while ( IexpressionOC ) ;I
193	labelO  Cfor ( IexpressionOC ; IexpressionOC ; IexpressionOC ) Istatement
194	labelO  Ccase IexpressionC { Iqual-statement-sequenceC }I
195	labelO  Calt { Iqual-statement-sequenceC }I
196	labelO  Cpick IidentifierC := IexpressionC { Ipqual-statement-sequenceC }I
197	Cbreak IidentifierOC ;I
198	Ccontinue IidentifierOC ;I
199	Creturn IexpressionOC ;I
200	Cspawn ItermC ( Iexpression-listOC ) ;I
201	Cexit ;I
202	Craise IexpressionOC ;I
203	C{ IstatementsC } exceptionI identifierOC{ Iqual-statement-sequenceC }I
204.s2
205.s1
206label:
207	identifier C:I
208.s2
209.s1
210qual-statement-sequence:
211	qual-listC =>I
212	qual-statement-sequence qual-listC =>I
213	qual-statement-sequence statement
214	qual-statement-sequence declaration
215.s2
216.s1
217qual-list:
218	qualifier
219	qual-listC or Iqualifier
220.s2
221.s1
222qualifier:
223	expression
224	expressionC to Iexpression
225	C*I
226.s2
227.s1
228pqual-statement-sequence:
229	pqual-listC =>I
230	pqual-statement-sequence pqual-listC =>I
231	pqual-statement-sequence statement
232	pqual-statement-sequence declaration
233.s2
234.s1
235pqual-list:
236	pqualifier
237	pqual-listC or Ipqualifier
238.s2
239.s1
240pqualifier:
241	identifier
242	C*I
243.s2
244.s1
245expression:
246	binary-expression
247	lvalue-expression assignment-operator expression
248	C( Ilvalue-expression-listC ) = Iexpression
249	send-expression
250	declare-expression
251	load-expression
252.s2
253.s1
254binary-expression:
255	monadic-expression
256	binary-expression binary-operator binary-expression
257.s2
258.s1
259binary-operator: one of
260	C** * / % + - << >> < > <= >= == != & ^ | :: && ||I
261.s2
262.s1
263assignment-operator: one of
264	C= &= |= ^= <<= >>= += -= *= /= %=I
265.s2
266.s1
267lvalue-expression:
268	identifier
269	CnilI
270	termC [ IexpressionC ]I
271	termC [ IexpressionC : ]I
272	termC . Iidentifier
273	C( Ilvalue-expression-listC )I
274	C* Imonadic-expression
275.s2
276.s1
277lvalue-expression-list:
278	lvalue-expression
279	lvalue-expression-listC , Ilvalue-expression
280.s2
281.s1
282expression:
283	term
284	monadic-operator monadic-expression
285	Carray [ IexpressionC ] of Idata-type
286	Carray [ IexpressionOC ] of { Iinit-listC }I
287	Clist of { Iexpression-listC }I
288	Cchan of Idata-type
289	Cchan [ IexpressionOC ] of Idata-type
290	data-type monadic-expression
291.s2
292.s1
293term:
294	identifier
295	constant
296	real-constant
297	string-constant
298	CnilI
299	C( Iexpression-listC )I
300	termC . Iidentifier
301	termC -> Iterm
302	termC ( Iexpression-listOC )I
303	termC [ IexpressionC ]I
304	termC [ IexpressionC : IexpressionC ]I
305	termC [ IexpressionC : ]I
306	termC ++I
307	termC --I
308.s2
309.s1
310monadic-operator: one of
311	C+ - ! ~ ref * ++ -- <- hd tl len tagofI
312.s2
313.s1
314init-list:
315	element
316	init-listC , Ielement
317.s2
318.s1
319element:
320	expression
321	expressionC => Iexpression
322	C* => Iexpression
323.s2
324.s1
325send-expression:
326	lvalue-expressionC <- = Iexpression
327.s2
328.s1
329declare-expression:
330	lvalue-expressionC := Iexpression
331.s2
332.s1
333load-expression:
334	Cload Iidentifier expression
335.s2
336