microsoft/typespec

Public

mirrored from https://github.com/microsoft/typespecAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
ad191775f4deaac5d304e63b8c3f9c25dca3519b

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

docs/spec.html

3444lines · modecode

1<!doctype html>
2<head><meta charset="utf-8"><script>'use strict';
3let sdoBox = {
4 init() {
5 this.$alternativeId = null;
6 this.$outer = document.createElement('div');
7 this.$outer.classList.add('toolbox-container');
8 this.$container = document.createElement('div');
9 this.$container.classList.add('toolbox');
10 this.$displayLink = document.createElement('a');
11 this.$displayLink.setAttribute('href', '#');
12 this.$displayLink.textContent = 'Syntax-Directed Operations';
13 this.$displayLink.addEventListener('click', e => {
14 e.preventDefault();
15 e.stopPropagation();
16 referencePane.showSDOs(sdoMap[this.$alternativeId] || {}, this.$alternativeId);
17 });
18 this.$container.appendChild(this.$displayLink);
19 this.$outer.appendChild(this.$container);
20 document.body.appendChild(this.$outer);
21 },
22
23 activate(el) {
24 clearTimeout(this.deactiveTimeout);
25 Toolbox.deactivate();
26 this.$alternativeId = el.id;
27 let numSdos = Object.keys(sdoMap[this.$alternativeId] || {}).length;
28 this.$displayLink.textContent = 'Syntax-Directed Operations (' + numSdos + ')';
29 this.$outer.classList.add('active');
30 let top = el.offsetTop - this.$outer.offsetHeight;
31 let left = el.offsetLeft + 50 - 10; // 50px = padding-left(=75px) + text-indent(=-25px)
32 this.$outer.setAttribute('style', 'left: ' + left + 'px; top: ' + top + 'px');
33 if (top < document.body.scrollTop) {
34 this.$container.scrollIntoView();
35 }
36 },
37
38 deactivate() {
39 clearTimeout(this.deactiveTimeout);
40 this.$outer.classList.remove('active');
41 },
42};
43
44document.addEventListener('DOMContentLoaded', () => {
45 if (typeof sdoMap == 'undefined') {
46 console.error('could not find sdo map');
47 return;
48 }
49 sdoBox.init();
50
51 let insideTooltip = false;
52 sdoBox.$outer.addEventListener('pointerenter', () => {
53 insideTooltip = true;
54 });
55 sdoBox.$outer.addEventListener('pointerleave', () => {
56 insideTooltip = false;
57 sdoBox.deactivate();
58 });
59
60 sdoBox.deactiveTimeout = null;
61 [].forEach.call(document.querySelectorAll('emu-grammar[type=definition] emu-rhs'), node => {
62 node.addEventListener('pointerenter', function () {
63 sdoBox.activate(this);
64 });
65
66 node.addEventListener('pointerleave', () => {
67 sdoBox.deactiveTimeout = setTimeout(() => {
68 if (!insideTooltip) {
69 sdoBox.deactivate();
70 }
71 }, 500);
72 });
73 });
74
75 document.addEventListener(
76 'keydown',
77 debounce(e => {
78 if (e.code === 'Escape') {
79 sdoBox.deactivate();
80 }
81 })
82 );
83});
84
85'use strict';
86function Search(menu) {
87 this.menu = menu;
88 this.$search = document.getElementById('menu-search');
89 this.$searchBox = document.getElementById('menu-search-box');
90 this.$searchResults = document.getElementById('menu-search-results');
91
92 this.loadBiblio();
93
94 document.addEventListener('keydown', this.documentKeydown.bind(this));
95
96 this.$searchBox.addEventListener(
97 'keydown',
98 debounce(this.searchBoxKeydown.bind(this), { stopPropagation: true })
99 );
100 this.$searchBox.addEventListener(
101 'keyup',
102 debounce(this.searchBoxKeyup.bind(this), { stopPropagation: true })
103 );
104
105 // Perform an initial search if the box is not empty.
106 if (this.$searchBox.value) {
107 this.search(this.$searchBox.value);
108 }
109}
110
111Search.prototype.loadBiblio = function () {
112 if (typeof biblio === 'undefined') {
113 console.error('could not find biblio');
114 this.biblio = { refToClause: {}, entries: [] };
115 } else {
116 this.biblio = biblio;
117 this.biblio.clauses = this.biblio.entries.filter(e => e.type === 'clause');
118 this.biblio.byId = this.biblio.entries.reduce((map, entry) => {
119 map[entry.id] = entry;
120 return map;
121 }, {});
122 let refParentClause = Object.create(null);
123 this.biblio.refParentClause = refParentClause;
124 let refsByClause = this.biblio.refsByClause;
125 Object.keys(refsByClause).forEach(clause => {
126 refsByClause[clause].forEach(ref => {
127 refParentClause[ref] = clause;
128 });
129 });
130 }
131};
132
133Search.prototype.documentKeydown = function (e) {
134 if (e.key === '/') {
135 e.preventDefault();
136 e.stopPropagation();
137 this.triggerSearch();
138 }
139};
140
141Search.prototype.searchBoxKeydown = function (e) {
142 e.stopPropagation();
143 e.preventDefault();
144 if (e.keyCode === 191 && e.target.value.length === 0) {
145 e.preventDefault();
146 } else if (e.keyCode === 13) {
147 e.preventDefault();
148 this.selectResult();
149 }
150};
151
152Search.prototype.searchBoxKeyup = function (e) {
153 if (e.keyCode === 13 || e.keyCode === 9) {
154 return;
155 }
156
157 this.search(e.target.value);
158};
159
160Search.prototype.triggerSearch = function () {
161 if (this.menu.isVisible()) {
162 this._closeAfterSearch = false;
163 } else {
164 this._closeAfterSearch = true;
165 this.menu.show();
166 }
167
168 this.$searchBox.focus();
169 this.$searchBox.select();
170};
171// bit 12 - Set if the result starts with searchString
172// bits 8-11: 8 - number of chunks multiplied by 2 if cases match, otherwise 1.
173// bits 1-7: 127 - length of the entry
174// General scheme: prefer case sensitive matches with fewer chunks, and otherwise
175// prefer shorter matches.
176function relevance(result) {
177 let relevance = 0;
178
179 relevance = Math.max(0, 8 - result.match.chunks) << 7;
180
181 if (result.match.caseMatch) {
182 relevance *= 2;
183 }
184
185 if (result.match.prefix) {
186 relevance += 2048;
187 }
188
189 relevance += Math.max(0, 255 - result.key.length);
190
191 return relevance;
192}
193
194Search.prototype.search = function (searchString) {
195 if (searchString === '') {
196 this.displayResults([]);
197 this.hideSearch();
198 return;
199 } else {
200 this.showSearch();
201 }
202
203 if (searchString.length === 1) {
204 this.displayResults([]);
205 return;
206 }
207
208 let results;
209
210 if (/^[\d.]*$/.test(searchString)) {
211 results = this.biblio.clauses
212 .filter(clause => clause.number.substring(0, searchString.length) === searchString)
213 .map(clause => ({ entry: clause }));
214 } else {
215 results = [];
216
217 for (let i = 0; i < this.biblio.entries.length; i++) {
218 let entry = this.biblio.entries[i];
219 let key = getKey(entry);
220 if (!key) {
221 // biblio entries without a key aren't searchable
222 continue;
223 }
224
225 let match = fuzzysearch(searchString, key);
226 if (match) {
227 results.push({ key, entry, match });
228 }
229 }
230
231 results.forEach(result => {
232 result.relevance = relevance(result, searchString);
233 });
234
235 results = results.sort((a, b) => b.relevance - a.relevance);
236 }
237
238 if (results.length > 50) {
239 results = results.slice(0, 50);
240 }
241
242 this.displayResults(results);
243};
244Search.prototype.hideSearch = function () {
245 this.$search.classList.remove('active');
246};
247
248Search.prototype.showSearch = function () {
249 this.$search.classList.add('active');
250};
251
252Search.prototype.selectResult = function () {
253 let $first = this.$searchResults.querySelector('li:first-child a');
254
255 if ($first) {
256 document.location = $first.getAttribute('href');
257 }
258
259 this.$searchBox.value = '';
260 this.$searchBox.blur();
261 this.displayResults([]);
262 this.hideSearch();
263
264 if (this._closeAfterSearch) {
265 this.menu.hide();
266 }
267};
268
269Search.prototype.displayResults = function (results) {
270 if (results.length > 0) {
271 this.$searchResults.classList.remove('no-results');
272
273 let html = '<ul>';
274
275 results.forEach(result => {
276 let key = result.key;
277 let entry = result.entry;
278 let id = entry.id;
279 let cssClass = '';
280 let text = '';
281
282 if (entry.type === 'clause') {
283 let number = entry.number ? entry.number + ' ' : '';
284 text = number + key;
285 cssClass = 'clause';
286 id = entry.id;
287 } else if (entry.type === 'production') {
288 text = key;
289 cssClass = 'prod';
290 id = entry.id;
291 } else if (entry.type === 'op') {
292 text = key;
293 cssClass = 'op';
294 id = entry.id || entry.refId;
295 } else if (entry.type === 'term') {
296 text = key;
297 cssClass = 'term';
298 id = entry.id || entry.refId;
299 }
300
301 if (text) {
302 // prettier-ignore
303 html += `<li class=menu-search-result-${cssClass}><a href="${makeLinkToId(id)}">${text}</a></li>`;
304 }
305 });
306
307 html += '</ul>';
308
309 this.$searchResults.innerHTML = html;
310 } else {
311 this.$searchResults.innerHTML = '';
312 this.$searchResults.classList.add('no-results');
313 }
314};
315
316function getKey(item) {
317 if (item.key) {
318 return item.key;
319 }
320 switch (item.type) {
321 case 'clause':
322 return item.title || item.titleHTML;
323 case 'production':
324 return item.name;
325 case 'op':
326 return item.aoid;
327 case 'term':
328 return item.term;
329 case 'table':
330 case 'figure':
331 case 'example':
332 case 'note':
333 return item.caption;
334 case 'step':
335 return item.id;
336 default:
337 throw new Error("Can't get key for " + item.type);
338 }
339}
340
341function Menu() {
342 this.$toggle = document.getElementById('menu-toggle');
343 this.$menu = document.getElementById('menu');
344 this.$toc = document.querySelector('menu-toc > ol');
345 this.$pins = document.querySelector('#menu-pins');
346 this.$pinList = document.getElementById('menu-pins-list');
347 this.$toc = document.querySelector('#menu-toc > ol');
348 this.$specContainer = document.getElementById('spec-container');
349 this.search = new Search(this);
350
351 this._pinnedIds = {};
352 this.loadPinEntries();
353
354 // toggle menu
355 this.$toggle.addEventListener('click', this.toggle.bind(this));
356
357 // keydown events for pinned clauses
358 document.addEventListener('keydown', this.documentKeydown.bind(this));
359
360 // toc expansion
361 let tocItems = this.$menu.querySelectorAll('#menu-toc li');
362 for (let i = 0; i < tocItems.length; i++) {
363 let $item = tocItems[i];
364 $item.addEventListener('click', event => {
365 $item.classList.toggle('active');
366 event.stopPropagation();
367 });
368 }
369
370 // close toc on toc item selection
371 let tocLinks = this.$menu.querySelectorAll('#menu-toc li > a');
372 for (let i = 0; i < tocLinks.length; i++) {
373 let $link = tocLinks[i];
374 $link.addEventListener('click', event => {
375 this.toggle();
376 event.stopPropagation();
377 });
378 }
379
380 // update active clause on scroll
381 window.addEventListener('scroll', debounce(this.updateActiveClause.bind(this)));
382 this.updateActiveClause();
383
384 // prevent menu scrolling from scrolling the body
385 this.$toc.addEventListener('wheel', e => {
386 let target = e.currentTarget;
387 let offTop = e.deltaY < 0 && target.scrollTop === 0;
388 if (offTop) {
389 e.preventDefault();
390 }
391 let offBottom = e.deltaY > 0 && target.offsetHeight + target.scrollTop >= target.scrollHeight;
392
393 if (offBottom) {
394 e.preventDefault();
395 }
396 });
397}
398
399Menu.prototype.documentKeydown = function (e) {
400 e.stopPropagation();
401 if (e.keyCode === 80) {
402 this.togglePinEntry();
403 } else if (e.keyCode > 48 && e.keyCode < 58) {
404 this.selectPin(e.keyCode - 49);
405 }
406};
407
408Menu.prototype.updateActiveClause = function () {
409 this.setActiveClause(findActiveClause(this.$specContainer));
410};
411
412Menu.prototype.setActiveClause = function (clause) {
413 this.$activeClause = clause;
414 this.revealInToc(this.$activeClause);
415};
416
417Menu.prototype.revealInToc = function (path) {
418 let current = this.$toc.querySelectorAll('li.revealed');
419 for (let i = 0; i < current.length; i++) {
420 current[i].classList.remove('revealed');
421 current[i].classList.remove('revealed-leaf');
422 }
423
424 current = this.$toc;
425 let index = 0;
426 outer: while (index < path.length) {
427 let children = current.children;
428 for (let i = 0; i < children.length; i++) {
429 if ('#' + path[index].id === children[i].children[1].hash) {
430 children[i].classList.add('revealed');
431 if (index === path.length - 1) {
432 children[i].classList.add('revealed-leaf');
433 let rect = children[i].getBoundingClientRect();
434 // this.$toc.getBoundingClientRect().top;
435 let tocRect = this.$toc.getBoundingClientRect();
436 if (rect.top + 10 > tocRect.bottom) {
437 this.$toc.scrollTop =
438 this.$toc.scrollTop + (rect.top - tocRect.bottom) + (rect.bottom - rect.top);
439 } else if (rect.top < tocRect.top) {
440 this.$toc.scrollTop = this.$toc.scrollTop - (tocRect.top - rect.top);
441 }
442 }
443 current = children[i].querySelector('ol');
444 index++;
445 continue outer;
446 }
447 }
448 console.log('could not find location in table of contents', path);
449 break;
450 }
451};
452
453function findActiveClause(root, path) {
454 let clauses = getChildClauses(root);
455 path = path || [];
456
457 for (let $clause of clauses) {
458 let rect = $clause.getBoundingClientRect();
459 let $header = $clause.querySelector('h1');
460 let marginTop = Math.max(
461 parseInt(getComputedStyle($clause)['margin-top']),
462 parseInt(getComputedStyle($header)['margin-top'])
463 );
464
465 if (rect.top - marginTop <= 1 && rect.bottom > 0) {
466 return findActiveClause($clause, path.concat($clause)) || path;
467 }
468 }
469
470 return path;
471}
472
473function* getChildClauses(root) {
474 for (let el of root.children) {
475 switch (el.nodeName) {
476 // descend into <emu-import>
477 case 'EMU-IMPORT':
478 yield* getChildClauses(el);
479 break;
480
481 // accept <emu-clause>, <emu-intro>, and <emu-annex>
482 case 'EMU-CLAUSE':
483 case 'EMU-INTRO':
484 case 'EMU-ANNEX':
485 yield el;
486 }
487 }
488}
489
490Menu.prototype.toggle = function () {
491 this.$menu.classList.toggle('active');
492};
493
494Menu.prototype.show = function () {
495 this.$menu.classList.add('active');
496};
497
498Menu.prototype.hide = function () {
499 this.$menu.classList.remove('active');
500};
501
502Menu.prototype.isVisible = function () {
503 return this.$menu.classList.contains('active');
504};
505
506Menu.prototype.showPins = function () {
507 this.$pins.classList.add('active');
508};
509
510Menu.prototype.hidePins = function () {
511 this.$pins.classList.remove('active');
512};
513
514Menu.prototype.addPinEntry = function (id) {
515 let entry = this.search.biblio.byId[id];
516 if (!entry) {
517 // id was deleted after pin (or something) so remove it
518 delete this._pinnedIds[id];
519 this.persistPinEntries();
520 return;
521 }
522
523 if (entry.type === 'clause') {
524 let prefix;
525 if (entry.number) {
526 prefix = entry.number + ' ';
527 } else {
528 prefix = '';
529 }
530 // prettier-ignore
531 this.$pinList.innerHTML += `<li><a href="${makeLinkToId(entry.id)}">${prefix}${entry.titleHTML}</a></li>`;
532 } else {
533 this.$pinList.innerHTML += `<li><a href="${makeLinkToId(entry.id)}">${getKey(entry)}</a></li>`;
534 }
535
536 if (Object.keys(this._pinnedIds).length === 0) {
537 this.showPins();
538 }
539 this._pinnedIds[id] = true;
540 this.persistPinEntries();
541};
542
543Menu.prototype.removePinEntry = function (id) {
544 let item = this.$pinList.querySelector(`a[href="${makeLinkToId(id)}"]`).parentNode;
545 this.$pinList.removeChild(item);
546 delete this._pinnedIds[id];
547 if (Object.keys(this._pinnedIds).length === 0) {
548 this.hidePins();
549 }
550
551 this.persistPinEntries();
552};
553
554Menu.prototype.persistPinEntries = function () {
555 try {
556 if (!window.localStorage) return;
557 } catch (e) {
558 return;
559 }
560
561 localStorage.pinEntries = JSON.stringify(Object.keys(this._pinnedIds));
562};
563
564Menu.prototype.loadPinEntries = function () {
565 try {
566 if (!window.localStorage) return;
567 } catch (e) {
568 return;
569 }
570
571 let pinsString = window.localStorage.pinEntries;
572 if (!pinsString) return;
573 let pins = JSON.parse(pinsString);
574 for (let i = 0; i < pins.length; i++) {
575 this.addPinEntry(pins[i]);
576 }
577};
578
579Menu.prototype.togglePinEntry = function (id) {
580 if (!id) {
581 id = this.$activeClause[this.$activeClause.length - 1].id;
582 }
583
584 if (this._pinnedIds[id]) {
585 this.removePinEntry(id);
586 } else {
587 this.addPinEntry(id);
588 }
589};
590
591Menu.prototype.selectPin = function (num) {
592 document.location = this.$pinList.children[num].children[0].href;
593};
594
595let menu;
596
597document.addEventListener('DOMContentLoaded', init);
598
599function debounce(fn, opts) {
600 opts = opts || {};
601 let timeout;
602 return function (e) {
603 if (opts.stopPropagation) {
604 e.stopPropagation();
605 }
606 let args = arguments;
607 if (timeout) {
608 clearTimeout(timeout);
609 }
610 timeout = setTimeout(() => {
611 timeout = null;
612 fn.apply(this, args);
613 }, 150);
614 };
615}
616
617let CLAUSE_NODES = ['EMU-CLAUSE', 'EMU-INTRO', 'EMU-ANNEX'];
618function findContainer($elem) {
619 let parentClause = $elem.parentNode;
620 while (parentClause && CLAUSE_NODES.indexOf(parentClause.nodeName) === -1) {
621 parentClause = parentClause.parentNode;
622 }
623 return parentClause;
624}
625
626function findLocalReferences(parentClause, name) {
627 let vars = parentClause.querySelectorAll('var');
628 let references = [];
629
630 for (let i = 0; i < vars.length; i++) {
631 let $var = vars[i];
632
633 if ($var.innerHTML === name) {
634 references.push($var);
635 }
636 }
637
638 return references;
639}
640
641let REFERENCED_CLASSES = Array.from({ length: 7 }, (x, i) => `referenced${i}`);
642function chooseHighlightIndex(parentClause) {
643 let counts = REFERENCED_CLASSES.map($class => parentClause.getElementsByClassName($class).length);
644 // Find the earliest index with the lowest count.
645 let minCount = Infinity;
646 let index = null;
647 for (let i = 0; i < counts.length; i++) {
648 if (counts[i] < minCount) {
649 minCount = counts[i];
650 index = i;
651 }
652 }
653 return index;
654}
655
656function toggleFindLocalReferences($elem) {
657 let parentClause = findContainer($elem);
658 let references = findLocalReferences(parentClause, $elem.innerHTML);
659 if ($elem.classList.contains('referenced')) {
660 references.forEach($reference => {
661 $reference.classList.remove('referenced', ...REFERENCED_CLASSES);
662 });
663 } else {
664 let index = chooseHighlightIndex(parentClause);
665 references.forEach($reference => {
666 $reference.classList.add('referenced', `referenced${index}`);
667 });
668 }
669}
670
671function installFindLocalReferences() {
672 document.addEventListener('click', e => {
673 if (e.target.nodeName === 'VAR') {
674 toggleFindLocalReferences(e.target);
675 }
676 });
677}
678
679document.addEventListener('DOMContentLoaded', installFindLocalReferences);
680
681// The following license applies to the fuzzysearch function
682// The MIT License (MIT)
683// Copyright © 2015 Nicolas Bevacqua
684// Copyright © 2016 Brian Terlson
685// Permission is hereby granted, free of charge, to any person obtaining a copy of
686// this software and associated documentation files (the "Software"), to deal in
687// the Software without restriction, including without limitation the rights to
688// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
689// the Software, and to permit persons to whom the Software is furnished to do so,
690// subject to the following conditions:
691
692// The above copyright notice and this permission notice shall be included in all
693// copies or substantial portions of the Software.
694
695// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
696// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
697// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
698// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
699// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
700// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
701function fuzzysearch(searchString, haystack, caseInsensitive) {
702 let tlen = haystack.length;
703 let qlen = searchString.length;
704 let chunks = 1;
705 let finding = false;
706
707 if (qlen > tlen) {
708 return false;
709 }
710
711 if (qlen === tlen) {
712 if (searchString === haystack) {
713 return { caseMatch: true, chunks: 1, prefix: true };
714 } else if (searchString.toLowerCase() === haystack.toLowerCase()) {
715 return { caseMatch: false, chunks: 1, prefix: true };
716 } else {
717 return false;
718 }
719 }
720
721 let j = 0;
722 outer: for (let i = 0; i < qlen; i++) {
723 let nch = searchString[i];
724 while (j < tlen) {
725 let targetChar = haystack[j++];
726 if (targetChar === nch) {
727 finding = true;
728 continue outer;
729 }
730 if (finding) {
731 chunks++;
732 finding = false;
733 }
734 }
735
736 if (caseInsensitive) {
737 return false;
738 }
739
740 return fuzzysearch(searchString.toLowerCase(), haystack.toLowerCase(), true);
741 }
742
743 return { caseMatch: !caseInsensitive, chunks, prefix: j <= qlen };
744}
745
746let referencePane = {
747 init() {
748 this.$container = document.createElement('div');
749 this.$container.setAttribute('id', 'references-pane-container');
750
751 let $spacer = document.createElement('div');
752 $spacer.setAttribute('id', 'references-pane-spacer');
753
754 this.$pane = document.createElement('div');
755 this.$pane.setAttribute('id', 'references-pane');
756
757 this.$container.appendChild($spacer);
758 this.$container.appendChild(this.$pane);
759
760 this.$header = document.createElement('div');
761 this.$header.classList.add('menu-pane-header');
762 this.$headerText = document.createElement('span');
763 this.$header.appendChild(this.$headerText);
764 this.$headerRefId = document.createElement('a');
765 this.$header.appendChild(this.$headerRefId);
766 this.$closeButton = document.createElement('span');
767 this.$closeButton.setAttribute('id', 'references-pane-close');
768 this.$closeButton.addEventListener('click', () => {
769 this.deactivate();
770 });
771 this.$header.appendChild(this.$closeButton);
772
773 this.$pane.appendChild(this.$header);
774 let tableContainer = document.createElement('div');
775 tableContainer.setAttribute('id', 'references-pane-table-container');
776
777 this.$table = document.createElement('table');
778 this.$table.setAttribute('id', 'references-pane-table');
779
780 this.$tableBody = this.$table.createTBody();
781
782 tableContainer.appendChild(this.$table);
783 this.$pane.appendChild(tableContainer);
784
785 menu.$specContainer.appendChild(this.$container);
786 },
787
788 activate() {
789 this.$container.classList.add('active');
790 },
791
792 deactivate() {
793 this.$container.classList.remove('active');
794 this.state = null;
795 },
796
797 showReferencesFor(entry) {
798 this.activate();
799 this.state = { type: 'ref', id: entry.id };
800 this.$headerText.textContent = 'References to ';
801 let newBody = document.createElement('tbody');
802 let previousId;
803 let previousCell;
804 let dupCount = 0;
805 this.$headerRefId.textContent = '#' + entry.id;
806 this.$headerRefId.setAttribute('href', makeLinkToId(entry.id));
807 this.$headerRefId.style.display = 'inline';
808 (entry.referencingIds || [])
809 .map(id => {
810 let cid = menu.search.biblio.refParentClause[id];
811 let clause = menu.search.biblio.byId[cid];
812 if (clause == null) {
813 throw new Error('could not find clause for id ' + cid);
814 }
815 return { id, clause };
816 })
817 .sort((a, b) => sortByClauseNumber(a.clause, b.clause))
818 .forEach(record => {
819 if (previousId === record.clause.id) {
820 previousCell.innerHTML += ` (<a href="${makeLinkToId(record.id)}">${dupCount + 2}</a>)`;
821 dupCount++;
822 } else {
823 let row = newBody.insertRow();
824 let cell = row.insertCell();
825 cell.innerHTML = record.clause.number;
826 cell = row.insertCell();
827 cell.innerHTML = `<a href="${makeLinkToId(record.id)}">${record.clause.titleHTML}</a>`;
828 previousCell = cell;
829 previousId = record.clause.id;
830 dupCount = 0;
831 }
832 }, this);
833 this.$table.removeChild(this.$tableBody);
834 this.$tableBody = newBody;
835 this.$table.appendChild(this.$tableBody);
836 },
837
838 showSDOs(sdos, alternativeId) {
839 let rhs = document.getElementById(alternativeId);
840 let parentName = rhs.parentNode.getAttribute('name');
841 let colons = rhs.parentNode.querySelector('emu-geq');
842 rhs = rhs.cloneNode(true);
843 rhs.querySelectorAll('emu-params,emu-constraints').forEach(e => {
844 e.remove();
845 });
846 rhs.querySelectorAll('[id]').forEach(e => {
847 e.removeAttribute('id');
848 });
849 rhs.querySelectorAll('a').forEach(e => {
850 e.parentNode.replaceChild(document.createTextNode(e.textContent), e);
851 });
852
853 // prettier-ignore
854 this.$headerText.innerHTML = `Syntax-Directed Operations for<br><a href="${makeLinkToId(alternativeId)}" class="menu-pane-header-production"><emu-nt>${parentName}</emu-nt> ${colons.outerHTML} </a>`;
855 this.$headerText.querySelector('a').append(rhs);
856 this.showSDOsBody(sdos, alternativeId);
857 },
858
859 showSDOsBody(sdos, alternativeId) {
860 this.activate();
861 this.state = { type: 'sdo', id: alternativeId, html: this.$headerText.innerHTML };
862 this.$headerRefId.style.display = 'none';
863 let newBody = document.createElement('tbody');
864 Object.keys(sdos).forEach(sdoName => {
865 let pair = sdos[sdoName];
866 let clause = pair.clause;
867 let ids = pair.ids;
868 let first = ids[0];
869 let row = newBody.insertRow();
870 let cell = row.insertCell();
871 cell.innerHTML = clause;
872 cell = row.insertCell();
873 let html = '<a href="' + makeLinkToId(first) + '">' + sdoName + '</a>';
874 for (let i = 1; i < ids.length; ++i) {
875 html += ' (<a href="' + makeLinkToId(ids[i]) + '">' + (i + 1) + '</a>)';
876 }
877 cell.innerHTML = html;
878 });
879 this.$table.removeChild(this.$tableBody);
880 this.$tableBody = newBody;
881 this.$table.appendChild(this.$tableBody);
882 },
883};
884
885let Toolbox = {
886 init() {
887 this.$outer = document.createElement('div');
888 this.$outer.classList.add('toolbox-container');
889 this.$container = document.createElement('div');
890 this.$container.classList.add('toolbox');
891 this.$outer.appendChild(this.$container);
892 this.$permalink = document.createElement('a');
893 this.$permalink.textContent = 'Permalink';
894 this.$pinLink = document.createElement('a');
895 this.$pinLink.textContent = 'Pin';
896 this.$pinLink.setAttribute('href', '#');
897 this.$pinLink.addEventListener('click', e => {
898 e.preventDefault();
899 e.stopPropagation();
900 menu.togglePinEntry(this.entry.id);
901 });
902
903 this.$refsLink = document.createElement('a');
904 this.$refsLink.setAttribute('href', '#');
905 this.$refsLink.addEventListener('click', e => {
906 e.preventDefault();
907 e.stopPropagation();
908 referencePane.showReferencesFor(this.entry);
909 });
910 this.$container.appendChild(this.$permalink);
911 this.$container.appendChild(this.$pinLink);
912 this.$container.appendChild(this.$refsLink);
913 document.body.appendChild(this.$outer);
914 },
915
916 activate(el, entry, target) {
917 if (el === this._activeEl) return;
918 sdoBox.deactivate();
919 this.active = true;
920 this.entry = entry;
921 this.$outer.classList.add('active');
922 this.top = el.offsetTop - this.$outer.offsetHeight;
923 this.left = el.offsetLeft - 10;
924 this.$outer.setAttribute('style', 'left: ' + this.left + 'px; top: ' + this.top + 'px');
925 this.updatePermalink();
926 this.updateReferences();
927 this._activeEl = el;
928 if (this.top < document.body.scrollTop && el === target) {
929 // don't scroll unless it's a small thing (< 200px)
930 this.$outer.scrollIntoView();
931 }
932 },
933
934 updatePermalink() {
935 this.$permalink.setAttribute('href', makeLinkToId(this.entry.id));
936 },
937
938 updateReferences() {
939 this.$refsLink.textContent = `References (${(this.entry.referencingIds || []).length})`;
940 },
941
942 activateIfMouseOver(e) {
943 let ref = this.findReferenceUnder(e.target);
944 if (ref && (!this.active || e.pageY > this._activeEl.offsetTop)) {
945 let entry = menu.search.biblio.byId[ref.id];
946 this.activate(ref.element, entry, e.target);
947 } else if (
948 this.active &&
949 (e.pageY < this.top || e.pageY > this._activeEl.offsetTop + this._activeEl.offsetHeight)
950 ) {
951 this.deactivate();
952 }
953 },
954
955 findReferenceUnder(el) {
956 while (el) {
957 let parent = el.parentNode;
958 if (el.nodeName === 'EMU-RHS' || el.nodeName === 'EMU-PRODUCTION') {
959 return null;
960 }
961 if (
962 el.nodeName === 'H1' &&
963 parent.nodeName.match(/EMU-CLAUSE|EMU-ANNEX|EMU-INTRO/) &&
964 parent.id
965 ) {
966 return { element: el, id: parent.id };
967 } else if (el.nodeName === 'EMU-NT') {
968 if (
969 parent.nodeName === 'EMU-PRODUCTION' &&
970 parent.id &&
971 parent.id[0] !== '_' &&
972 parent.firstElementChild === el
973 ) {
974 // return the LHS non-terminal element
975 return { element: el, id: parent.id };
976 }
977 return null;
978 } else if (
979 el.nodeName.match(/EMU-(?!CLAUSE|XREF|ANNEX|INTRO)|DFN/) &&
980 el.id &&
981 el.id[0] !== '_'
982 ) {
983 if (
984 el.nodeName === 'EMU-FIGURE' ||
985 el.nodeName === 'EMU-TABLE' ||
986 el.nodeName === 'EMU-EXAMPLE'
987 ) {
988 // return the figcaption element
989 return { element: el.children[0].children[0], id: el.id };
990 } else {
991 return { element: el, id: el.id };
992 }
993 }
994 el = parent;
995 }
996 },
997
998 deactivate() {
999 this.$outer.classList.remove('active');
1000 this._activeEl = null;
1001 this.active = false;
1002 },
1003};
1004
1005function sortByClauseNumber(clause1, clause2) {
1006 let c1c = clause1.number.split('.');
1007 let c2c = clause2.number.split('.');
1008
1009 for (let i = 0; i < c1c.length; i++) {
1010 if (i >= c2c.length) {
1011 return 1;
1012 }
1013
1014 let c1 = c1c[i];
1015 let c2 = c2c[i];
1016 let c1cn = Number(c1);
1017 let c2cn = Number(c2);
1018
1019 if (Number.isNaN(c1cn) && Number.isNaN(c2cn)) {
1020 if (c1 > c2) {
1021 return 1;
1022 } else if (c1 < c2) {
1023 return -1;
1024 }
1025 } else if (!Number.isNaN(c1cn) && Number.isNaN(c2cn)) {
1026 return -1;
1027 } else if (Number.isNaN(c1cn) && !Number.isNaN(c2cn)) {
1028 return 1;
1029 } else if (c1cn > c2cn) {
1030 return 1;
1031 } else if (c1cn < c2cn) {
1032 return -1;
1033 }
1034 }
1035
1036 if (c1c.length === c2c.length) {
1037 return 0;
1038 }
1039 return -1;
1040}
1041
1042function makeLinkToId(id) {
1043 let hash = '#' + id;
1044 if (typeof idToSection === 'undefined' || !idToSection[id]) {
1045 return hash;
1046 }
1047 let targetSec = idToSection[id];
1048 return (targetSec === 'index' ? './' : targetSec + '.html') + hash;
1049}
1050
1051function doShortcut(e) {
1052 if (!(e.target instanceof HTMLElement)) {
1053 return;
1054 }
1055 let target = e.target;
1056 let name = target.nodeName.toLowerCase();
1057 if (name === 'textarea' || name === 'input' || name === 'select' || target.isContentEditable) {
1058 return;
1059 }
1060 if (e.altKey || e.ctrlKey || e.metaKey) {
1061 return;
1062 }
1063 if (e.key === 'm' && usesMultipage) {
1064 let pathParts = location.pathname.split('/');
1065 let hash = location.hash;
1066 if (pathParts[pathParts.length - 2] === 'multipage') {
1067 if (hash === '') {
1068 let sectionName = pathParts[pathParts.length - 1];
1069 if (sectionName.endsWith('.html')) {
1070 sectionName = sectionName.slice(0, -5);
1071 }
1072 if (idToSection['sec-' + sectionName] !== undefined) {
1073 hash = '#sec-' + sectionName;
1074 }
1075 }
1076 location = pathParts.slice(0, -2).join('/') + '/' + hash;
1077 } else {
1078 location = 'multipage/' + hash;
1079 }
1080 } else if (e.key === 'u') {
1081 document.documentElement.classList.toggle('show-ao-annotations');
1082 } else if (e.key === '?') {
1083 document.getElementById('shortcuts-help').classList.toggle('active');
1084 }
1085}
1086
1087function init() {
1088 menu = new Menu();
1089 let $container = document.getElementById('spec-container');
1090 $container.addEventListener(
1091 'mouseover',
1092 debounce(e => {
1093 Toolbox.activateIfMouseOver(e);
1094 })
1095 );
1096 document.addEventListener(
1097 'keydown',
1098 debounce(e => {
1099 if (e.code === 'Escape') {
1100 if (Toolbox.active) {
1101 Toolbox.deactivate();
1102 }
1103 document.getElementById('shortcuts-help').classList.remove('active');
1104 }
1105 })
1106 );
1107}
1108
1109document.addEventListener('keypress', doShortcut);
1110
1111document.addEventListener('DOMContentLoaded', () => {
1112 Toolbox.init();
1113 referencePane.init();
1114});
1115
1116'use strict';
1117let decimalBullet = Array.from({ length: 100 }, (a, i) => '' + (i + 1));
1118let alphaBullet = Array.from({ length: 26 }, (a, i) => String.fromCharCode('a'.charCodeAt(0) + i));
1119
1120// prettier-ignore
1121let romanBullet = ['i', 'ii', 'iii', 'iv', 'v', 'vi', 'vii', 'viii', 'ix', 'x', 'xi', 'xii', 'xiii', 'xiv', 'xv', 'xvi', 'xvii', 'xviii', 'xix', 'xx', 'xxi', 'xxii', 'xxiii', 'xxiv', 'xxv'];
1122// prettier-ignore
1123let bullets = [decimalBullet, alphaBullet, romanBullet, decimalBullet, alphaBullet, romanBullet];
1124
1125function addStepNumberText(ol, parentIndex) {
1126 for (let i = 0; i < ol.children.length; ++i) {
1127 let child = ol.children[i];
1128 let index = parentIndex.concat([i]);
1129 let applicable = bullets[Math.min(index.length - 1, 5)];
1130 let span = document.createElement('span');
1131 span.textContent = (applicable[i] || '?') + '. ';
1132 span.style.fontSize = '0';
1133 span.setAttribute('aria-hidden', 'true');
1134 child.prepend(span);
1135 let sublist = child.querySelector('ol');
1136 if (sublist != null) {
1137 addStepNumberText(sublist, index);
1138 }
1139 }
1140}
1141document.addEventListener('DOMContentLoaded', () => {
1142 document.querySelectorAll('emu-alg > ol').forEach(ol => {
1143 addStepNumberText(ol, []);
1144 });
1145});
1146
1147let sdoMap = JSON.parse(`{}`);
1148let biblio = JSON.parse(`{"refsByClause":{"lexical-grammar":["_ref_0","_ref_1","_ref_2","_ref_3","_ref_4","_ref_5","_ref_6","_ref_7","_ref_8","_ref_9","_ref_10","_ref_11","_ref_12","_ref_13","_ref_14","_ref_15","_ref_16","_ref_17","_ref_18","_ref_19","_ref_20","_ref_21","_ref_22","_ref_23","_ref_24","_ref_25","_ref_26","_ref_27","_ref_28","_ref_29","_ref_30","_ref_31","_ref_32","_ref_33","_ref_34","_ref_35","_ref_36","_ref_37","_ref_38","_ref_39","_ref_40","_ref_41","_ref_42","_ref_43","_ref_44","_ref_45","_ref_46","_ref_47","_ref_48","_ref_49","_ref_50","_ref_51","_ref_52","_ref_53","_ref_54","_ref_55","_ref_56","_ref_57","_ref_58","_ref_59","_ref_60","_ref_61","_ref_62","_ref_63","_ref_64","_ref_65","_ref_66","_ref_67","_ref_68","_ref_69"],"syntactic-grammar":["_ref_70","_ref_71","_ref_72","_ref_73","_ref_74","_ref_75","_ref_76","_ref_77","_ref_78","_ref_79","_ref_80","_ref_81","_ref_82","_ref_83","_ref_84","_ref_85","_ref_86","_ref_87","_ref_88","_ref_89","_ref_90","_ref_91","_ref_92","_ref_93","_ref_94","_ref_95","_ref_96","_ref_97","_ref_98","_ref_99","_ref_100","_ref_101","_ref_102","_ref_103","_ref_104","_ref_105","_ref_106","_ref_107","_ref_108","_ref_109","_ref_110","_ref_111","_ref_112","_ref_113","_ref_114","_ref_115","_ref_116","_ref_117","_ref_118","_ref_119","_ref_120","_ref_121","_ref_122","_ref_123","_ref_124","_ref_125","_ref_126","_ref_127","_ref_128","_ref_129","_ref_130","_ref_131","_ref_132","_ref_133","_ref_134","_ref_135","_ref_136","_ref_137","_ref_138","_ref_139","_ref_140","_ref_141","_ref_142","_ref_143","_ref_144","_ref_145","_ref_146","_ref_147","_ref_148","_ref_149","_ref_150","_ref_151","_ref_152","_ref_153","_ref_154","_ref_155","_ref_156","_ref_157","_ref_158","_ref_159","_ref_160","_ref_161","_ref_162","_ref_163","_ref_164","_ref_165","_ref_166","_ref_167","_ref_168","_ref_169","_ref_170","_ref_171","_ref_172","_ref_173","_ref_174","_ref_175","_ref_176","_ref_177","_ref_178","_ref_179","_ref_180","_ref_181","_ref_182","_ref_183","_ref_184","_ref_185","_ref_186","_ref_187","_ref_188","_ref_189","_ref_190","_ref_191","_ref_192","_ref_193","_ref_194","_ref_195","_ref_196","_ref_197","_ref_198","_ref_199","_ref_200","_ref_201","_ref_202","_ref_203","_ref_204","_ref_205","_ref_206","_ref_207","_ref_208","_ref_209","_ref_210","_ref_211","_ref_212","_ref_213","_ref_214","_ref_215","_ref_216","_ref_217","_ref_218","_ref_219","_ref_220","_ref_221","_ref_222","_ref_223","_ref_224","_ref_225","_ref_226","_ref_227","_ref_228","_ref_229","_ref_230","_ref_231","_ref_232","_ref_233","_ref_234","_ref_235","_ref_236","_ref_237","_ref_238","_ref_239","_ref_240","_ref_241","_ref_242","_ref_243","_ref_244","_ref_245","_ref_246","_ref_247","_ref_248","_ref_249","_ref_250","_ref_251","_ref_252","_ref_253","_ref_254","_ref_255","_ref_256","_ref_257","_ref_258","_ref_259","_ref_260","_ref_261","_ref_262","_ref_263","_ref_264","_ref_265","_ref_266","_ref_267","_ref_268","_ref_269","_ref_270","_ref_271","_ref_272","_ref_273","_ref_274","_ref_275","_ref_276","_ref_277","_ref_278","_ref_279","_ref_280","_ref_281","_ref_282","_ref_283","_ref_284","_ref_285","_ref_286","_ref_287","_ref_288","_ref_289","_ref_290","_ref_291","_ref_292","_ref_293","_ref_294","_ref_295","_ref_296","_ref_297","_ref_298","_ref_299","_ref_300","_ref_301","_ref_302","_ref_303","_ref_304","_ref_305"]},"entries":[{"type":"clause","id":"intro","titleHTML":"Introduction","number":""},{"type":"production","id":"prod-SourceCharacter","name":"SourceCharacter","referencingIds":["_ref_49","_ref_53","_ref_64","_ref_65","_ref_69"]},{"type":"production","id":"prod-InputElement","name":"InputElement"},{"type":"production","id":"prod-Token","name":"Token","referencingIds":["_ref_0"]},{"type":"production","id":"prod-Trivia","name":"Trivia","referencingIds":["_ref_1"]},{"type":"production","id":"prod-Keyword","name":"Keyword","referencingIds":["_ref_2","_ref_11"]},{"type":"production","id":"prod-Identifier","name":"Identifier","referencingIds":["_ref_3","_ref_89","_ref_103","_ref_109","_ref_116","_ref_120","_ref_127","_ref_133","_ref_143","_ref_150","_ref_156","_ref_159","_ref_161","_ref_166","_ref_191","_ref_193","_ref_213","_ref_258","_ref_260","_ref_266","_ref_268","_ref_269","_ref_295"]},{"type":"production","id":"prod-IdentifierName","name":"IdentifierName","referencingIds":["_ref_10","_ref_13"]},{"type":"production","id":"prod-IdentifierStart","name":"IdentifierStart","referencingIds":["_ref_12"]},{"type":"production","id":"prod-IdentifierContinue","name":"IdentifierContinue","referencingIds":["_ref_14","_ref_15"]},{"type":"production","id":"prod-AsciiLetter","name":"AsciiLetter","referencingIds":["_ref_17"]},{"type":"production","id":"prod-BooleanLiteral","name":"BooleanLiteral","referencingIds":["_ref_9","_ref_184"]},{"type":"production","id":"prod-NumericLiteral","name":"NumericLiteral","referencingIds":["_ref_4","_ref_149","_ref_185"]},{"type":"production","id":"prod-DecimalLiteral","name":"DecimalLiteral","referencingIds":["_ref_19"]},{"type":"production","id":"prod-DecimalIntegerLiteral","name":"DecimalIntegerLiteral","referencingIds":["_ref_22","_ref_25","_ref_33"]},{"type":"production","id":"prod-DecimalDigits","name":"DecimalDigits","referencingIds":["_ref_23","_ref_27","_ref_28","_ref_29","_ref_31","_ref_34","_ref_35","_ref_36"]},{"type":"production","id":"prod-DecimalDigit","name":"DecimalDigit","referencingIds":["_ref_16","_ref_18","_ref_30","_ref_32"]},{"type":"production","id":"prod-ExponentPart","name":"ExponentPart","referencingIds":["_ref_24","_ref_26"]},{"type":"production","id":"prod-DecimalIntegerInteger","name":"DecimalIntegerInteger"},{"type":"production","id":"prod-HexIntegerLiteral","name":"HexIntegerLiteral","referencingIds":["_ref_20"]},{"type":"production","id":"prod-HexDigits","name":"HexDigits","referencingIds":["_ref_37","_ref_39"]},{"type":"production","id":"prod-HexDigit","name":"HexDigit","referencingIds":["_ref_38","_ref_40"]},{"type":"production","id":"prod-BinaryIntegerLiteral","name":"BinaryIntegerLiteral","referencingIds":["_ref_21"]},{"type":"production","id":"prod-BinaryDigits","name":"BinaryDigits","referencingIds":["_ref_41","_ref_43"]},{"type":"production","id":"prod-BinaryDigit","name":"BinaryDigit","referencingIds":["_ref_42","_ref_44"]},{"type":"production","id":"prod-StringLiteral","name":"StringLiteral","referencingIds":["_ref_5","_ref_77","_ref_106","_ref_130","_ref_146","_ref_148","_ref_183","_ref_298"]},{"type":"production","id":"prod-StringCharacters","name":"StringCharacters","referencingIds":["_ref_45","_ref_48"]},{"type":"production","id":"prod-StringCharacter","name":"StringCharacter","referencingIds":["_ref_47"]},{"type":"production","id":"prod-TripleQuotedStringCharacters","name":"TripleQuotedStringCharacters","referencingIds":["_ref_46","_ref_52"]},{"type":"production","id":"prod-TripleQuotedStringCharacter","name":"TripleQuotedStringCharacter","referencingIds":["_ref_51"]},{"type":"production","id":"prod-EscapeCharacter","name":"EscapeCharacter","referencingIds":["_ref_50","_ref_54"]},{"type":"production","id":"prod-Punctuator","name":"Punctuator","referencingIds":["_ref_6"]},{"type":"production","id":"prod-WhiteSpace","name":"WhiteSpace","referencingIds":["_ref_8"]},{"type":"production","id":"prod-Comment","name":"Comment","referencingIds":["_ref_7"]},{"type":"production","id":"prod-MultiLineComment","name":"MultiLineComment","referencingIds":["_ref_55"]},{"type":"production","id":"prod-MultiLineCommentChars","name":"MultiLineCommentChars","referencingIds":["_ref_57","_ref_59","_ref_62"]},{"type":"production","id":"prod-PostAsteriskCommentChars","name":"PostAsteriskCommentChars","referencingIds":["_ref_60","_ref_63"]},{"type":"production","id":"prod-MultiLineNotAsteriskChar","name":"MultiLineNotAsteriskChar","referencingIds":["_ref_58"]},{"type":"production","id":"prod-MultiLineNotForwardSlashOrAsteriskChar","name":"MultiLineNotForwardSlashOrAsteriskChar","referencingIds":["_ref_61"]},{"type":"production","id":"prod-SingleLineComment","name":"SingleLineComment","referencingIds":["_ref_56"]},{"type":"production","id":"prod-SingleLineCommentChars","name":"SingleLineCommentChars","referencingIds":["_ref_66","_ref_68"]},{"type":"production","id":"prod-SingleLineCommentChar","name":"SingleLineCommentChar","referencingIds":["_ref_67"]},{"type":"clause","id":"lexical-grammar","titleHTML":"Lexical Grammar","number":"1"},{"type":"production","id":"prod-CadlScriptItemList","name":"CadlScriptItemList","referencingIds":["_ref_70"]},{"type":"production","id":"prod-CadlScriptItem","name":"CadlScriptItem","referencingIds":["_ref_71"]},{"type":"production","id":"prod-BlocklessNamespaceStatement","name":"BlocklessNamespaceStatement","referencingIds":["_ref_72"]},{"type":"production","id":"prod-ImportStatement","name":"ImportStatement","referencingIds":["_ref_73"]},{"type":"production","id":"prod-StatementList","name":"StatementList","referencingIds":["_ref_78","_ref_164"]},{"type":"production","id":"prod-Statement","name":"Statement","referencingIds":["_ref_74","_ref_79"]},{"type":"production","id":"prod-UsingStatement","name":"UsingStatement","referencingIds":["_ref_84"]},{"type":"production","id":"prod-ModelStatement","name":"ModelStatement","referencingIds":["_ref_80"]},{"type":"production","id":"prod-ModelHeritage","name":"ModelHeritage","referencingIds":["_ref_90"]},{"type":"production","id":"prod-ModelBody","name":"ModelBody","referencingIds":["_ref_91","_ref_197"]},{"type":"production","id":"prod-ModelPropertyList","name":"ModelPropertyList","referencingIds":["_ref_94","_ref_95","_ref_97","_ref_99","_ref_117","_ref_167"]},{"type":"production","id":"prod-ModelProperty","name":"ModelProperty","referencingIds":["_ref_96","_ref_98","_ref_100"]},{"type":"production","id":"prod-ModelSpreadProperty","name":"ModelSpreadProperty","referencingIds":["_ref_101"]},{"type":"production","id":"prod-InterfaceStatement","name":"InterfaceStatement","referencingIds":["_ref_81"]},{"type":"production","id":"prod-InterfaceHeritage","name":"InterfaceHeritage","referencingIds":["_ref_110"]},{"type":"production","id":"prod-InterfaceMemberList","name":"InterfaceMemberList","referencingIds":["_ref_112","_ref_114"]},{"type":"production","id":"prod-InterfaceMember","name":"InterfaceMember","referencingIds":["_ref_113","_ref_115"]},{"type":"production","id":"prod-UnionStatement","name":"UnionStatement"},{"type":"production","id":"prod-UnionBody","name":"UnionBody","referencingIds":["_ref_121"]},{"type":"production","id":"prod-UnionVariantList","name":"UnionVariantList","referencingIds":["_ref_122","_ref_124"]},{"type":"production","id":"prod-UnionVariant","name":"UnionVariant","referencingIds":["_ref_123","_ref_125"]},{"type":"production","id":"prod-EnumStatement","name":"EnumStatement","referencingIds":["_ref_85"]},{"type":"production","id":"prod-EnumBody","name":"EnumBody","referencingIds":["_ref_134"]},{"type":"production","id":"prod-EnumMemberList","name":"EnumMemberList","referencingIds":["_ref_135","_ref_136","_ref_138","_ref_140"]},{"type":"production","id":"prod-EnumMember","name":"EnumMember","referencingIds":["_ref_137","_ref_139","_ref_141"]},{"type":"production","id":"prod-EnumMemberValue","name":"EnumMemberValue","referencingIds":["_ref_144","_ref_147"]},{"type":"production","id":"prod-AliasStatement","name":"AliasStatement","referencingIds":["_ref_86"]},{"type":"production","id":"prod-TemplateParameterList","name":"TemplateParameterList","referencingIds":["_ref_152","_ref_154"]},{"type":"production","id":"prod-TemplateParameter","name":"TemplateParameter","referencingIds":["_ref_153","_ref_155"]},{"type":"production","id":"prod-TemplateParameterDefault","name":"TemplateParameterDefault","referencingIds":["_ref_157"]},{"type":"production","id":"prod-IdentifierList","name":"IdentifierList","referencingIds":["_ref_160","_ref_214","_ref_305"]},{"type":"production","id":"prod-NamespaceStatement","name":"NamespaceStatement","referencingIds":["_ref_82"]},{"type":"production","id":"prod-OperationStatement","name":"OperationStatement","referencingIds":["_ref_83"]},{"type":"production","id":"prod-Expression","name":"Expression","referencingIds":["_ref_104","_ref_107","_ref_118","_ref_128","_ref_131","_ref_151","_ref_158","_ref_168","_ref_196","_ref_199","_ref_201"]},{"type":"production","id":"prod-UnionExpressionOrHigher","name":"UnionExpressionOrHigher","referencingIds":["_ref_169","_ref_171"]},{"type":"production","id":"prod-IntersectionExpressionOrHigher","name":"IntersectionExpressionOrHigher","referencingIds":["_ref_170","_ref_172","_ref_174"]},{"type":"production","id":"prod-ArrayExpressionOrHigher","name":"ArrayExpressionOrHigher","referencingIds":["_ref_173","_ref_175","_ref_177"]},{"type":"production","id":"prod-PrimaryExpression","name":"PrimaryExpression","referencingIds":["_ref_176"]},{"type":"production","id":"prod-Literal","name":"Literal","referencingIds":["_ref_178","_ref_272"]},{"type":"production","id":"prod-ReferenceExpression","name":"ReferenceExpression","referencingIds":["_ref_92","_ref_93","_ref_108","_ref_179","_ref_188","_ref_190","_ref_212"]},{"type":"production","id":"prod-ReferenceExpressionList","name":"ReferenceExpressionList","referencingIds":["_ref_111","_ref_189"]},{"type":"production","id":"prod-IdentifierOrMemberExpression","name":"IdentifierOrMemberExpression","referencingIds":["_ref_76","_ref_87","_ref_163","_ref_186","_ref_192","_ref_204","_ref_263"]},{"type":"production","id":"prod-TemplateArguments","name":"TemplateArguments","referencingIds":["_ref_187"]},{"type":"production","id":"prod-ProjectionArguments","name":"ProjectionArguments"},{"type":"production","id":"prod-ParenthesizedExpression","name":"ParenthesizedExpression","referencingIds":["_ref_180"]},{"type":"production","id":"prod-ModelExpression","name":"ModelExpression","referencingIds":["_ref_181"]},{"type":"production","id":"prod-TupleExpression","name":"TupleExpression","referencingIds":["_ref_182"]},{"type":"production","id":"prod-ExpressionList","name":"ExpressionList","referencingIds":["_ref_194","_ref_195","_ref_198","_ref_200","_ref_206"]},{"type":"production","id":"prod-DecoratorList","name":"DecoratorList","referencingIds":["_ref_75","_ref_88","_ref_102","_ref_105","_ref_119","_ref_126","_ref_129","_ref_132","_ref_142","_ref_145","_ref_162","_ref_165","_ref_202","_ref_294","_ref_297"]},{"type":"production","id":"prod-Decorator","name":"Decorator","referencingIds":["_ref_203"]},{"type":"production","id":"prod-DecoratorArguments","name":"DecoratorArguments","referencingIds":["_ref_205"]},{"type":"production","id":"prod-ProjectionStatement","name":"ProjectionStatement"},{"type":"production","id":"prod-ProjectionSelector","name":"ProjectionSelector","referencingIds":["_ref_207"]},{"type":"production","id":"prod-ProjectionDirection","name":"ProjectionDirection","referencingIds":["_ref_208"]},{"type":"production","id":"prod-ProjectionTag","name":"ProjectionTag","referencingIds":["_ref_209"]},{"type":"production","id":"prod-ProjectionParameters","name":"ProjectionParameters","referencingIds":["_ref_210"]},{"type":"production","id":"prod-ProjectionBody","name":"ProjectionBody","referencingIds":["_ref_211"]},{"type":"production","id":"prod-ProjectionStatementList","name":"ProjectionStatementList","referencingIds":["_ref_215","_ref_217"]},{"type":"production","id":"prod-ProjectionStatementItem","name":"ProjectionStatementItem","referencingIds":["_ref_216","_ref_218"]},{"type":"production","id":"prod-ProjectionExpression","name":"ProjectionExpression","referencingIds":["_ref_221","_ref_277","_ref_279","_ref_280","_ref_281","_ref_283","_ref_296","_ref_299","_ref_300"]},{"type":"production","id":"prod-ProjectionReturnExpression","name":"ProjectionReturnExpression","referencingIds":["_ref_219"]},{"type":"production","id":"prod-ProjectionLogicalOrExpression","name":"ProjectionLogicalOrExpression","referencingIds":["_ref_220","_ref_223"]},{"type":"production","id":"prod-ProjectionLogicalAndExpression","name":"ProjectionLogicalAndExpression","referencingIds":["_ref_222","_ref_224","_ref_226"]},{"type":"production","id":"prod-ProjectionEqualityExpression","name":"ProjectionEqualityExpression","referencingIds":["_ref_229","_ref_231"]},{"type":"production","id":"prod-ProjectionRelationalExpression","name":"ProjectionRelationalExpression","referencingIds":["_ref_225","_ref_227","_ref_228","_ref_230","_ref_232","_ref_234","_ref_236","_ref_238","_ref_240"]},{"type":"production","id":"prod-ProjectionAdditiveExpression","name":"ProjectionAdditiveExpression","referencingIds":["_ref_233","_ref_235","_ref_237","_ref_239","_ref_241","_ref_243","_ref_245"]},{"type":"production","id":"prod-ProjectionMultiplicativeExpression","name":"ProjectionMultiplicativeExpression","referencingIds":["_ref_242","_ref_244","_ref_246","_ref_248","_ref_250"]},{"type":"production","id":"prod-ProjectionUnaryExpression","name":"ProjectionUnaryExpression","referencingIds":["_ref_247","_ref_249","_ref_251","_ref_253"]},{"type":"production","id":"prod-ProjectionCallExpression","name":"ProjectionCallExpression","referencingIds":["_ref_252","_ref_255","_ref_257","_ref_259"]},{"type":"production","id":"prod-ProjectionCallArguments","name":"ProjectionCallArguments","referencingIds":["_ref_256"]},{"type":"production","id":"prod-ProjectionDecoratorReferenceExpression","name":"ProjectionDecoratorReferenceExpression","referencingIds":["_ref_254"]},{"type":"production","id":"prod-ProjectionMemberExpression","name":"ProjectionMemberExpression","referencingIds":["_ref_262","_ref_265","_ref_267"]},{"type":"production","id":"prod-ProjectionPrimaryExpression","name":"ProjectionPrimaryExpression","referencingIds":["_ref_264"]},{"type":"production","id":"prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList","name":"CoverProjectionParenthesizedExpressionAndLambdaParameterList","referencingIds":["_ref_275","_ref_302"]},{"type":"production","id":"prod-ProjectionExpressionList","name":"ProjectionExpressionList","referencingIds":["_ref_261","_ref_276","_ref_278","_ref_301","_ref_304"]},{"type":"production","id":"prod-ProjectionIfExpression","name":"ProjectionIfExpression","referencingIds":["_ref_270","_ref_284"]},{"type":"production","id":"prod-ProjectionModelExpression","name":"ProjectionModelExpression","referencingIds":["_ref_273"]},{"type":"production","id":"prod-ProjectionModelBody","name":"ProjectionModelBody","referencingIds":["_ref_285"]},{"type":"production","id":"prod-ProjectionModelPropertyList","name":"ProjectionModelPropertyList","referencingIds":["_ref_286","_ref_287","_ref_289","_ref_291"]},{"type":"production","id":"prod-ProjectionModelProperty","name":"ProjectionModelProperty","referencingIds":["_ref_288","_ref_290","_ref_292"]},{"type":"production","id":"prod-ProjectionModelSpreadProperty","name":"ProjectionModelSpreadProperty","referencingIds":["_ref_293"]},{"type":"production","id":"prod-ProjectionTupleExpression","name":"ProjectionTupleExpression","referencingIds":["_ref_274"]},{"type":"production","id":"prod-ProjectionLambdaExpression","name":"ProjectionLambdaExpression","referencingIds":["_ref_271"]},{"type":"production","id":"prod-ProjectionBlockExpression","name":"ProjectionBlockExpression","referencingIds":["_ref_282","_ref_303"]},{"type":"production","id":"prod-LambdaParameters","name":"LambdaParameters"},{"type":"clause","id":"syntactic-grammar","titleHTML":"Syntactic Grammar","number":"2"}]}`);
1149;let usesMultipage = false</script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/base16/solarized-light.min.css"><style>body {
1150 display: flex;
1151 font-size: 18px;
1152 line-height: 1.5;
1153 font-family: Cambria, Palatino Linotype, Palatino, Liberation Serif, serif;
1154 padding: 0;
1155 margin: 0;
1156 color: #111;
1157}
1158
1159#spec-container {
1160 padding: 0 20px;
1161 flex-grow: 1;
1162 flex-basis: 66%;
1163 box-sizing: border-box;
1164 overflow: hidden;
1165 padding-bottom: 1em;
1166}
1167
1168body.oldtoc {
1169 margin: 0 auto;
1170}
1171
1172a {
1173 text-decoration: none;
1174 color: #206ca7;
1175}
1176
1177a:visited {
1178 color: #206ca7;
1179}
1180
1181a:hover {
1182 text-decoration: underline;
1183 color: #239dee;
1184}
1185
1186a.e-user-code,
1187span.e-user-code {
1188 white-space: nowrap;
1189}
1190
1191a.e-user-code::before,
1192span.e-user-code::before {
1193 display: none;
1194 color: brown;
1195 background-color: white;
1196 border: 2pt solid brown;
1197 padding: 0.3ex;
1198 margin: 0 0.25em 0 0;
1199 line-height: 1;
1200 vertical-align: text-top;
1201 text-transform: uppercase;
1202 font-family: 'Comic Code', sans-serif;
1203 font-weight: 900;
1204 font-size: x-small;
1205}
1206
1207a.e-user-code:hover::before,
1208span.e-user-code:hover::before {
1209 background-color: brown;
1210 color: white;
1211}
1212
1213html.show-ao-annotations a.e-user-code::before,
1214html.show-ao-annotations span.e-user-code::before {
1215 display: inline-block;
1216}
1217
1218a.e-user-code::before,
1219span.e-user-code::before {
1220 content: 'UC';
1221}
1222
1223code {
1224 font-weight: bold;
1225 font-family: Consolas, Monaco, monospace;
1226 white-space: pre;
1227}
1228
1229pre code {
1230 font-weight: inherit;
1231}
1232
1233pre code.hljs {
1234 background-color: #fff;
1235 margin: 0;
1236 padding: 0;
1237}
1238
1239ol.toc {
1240 list-style: none;
1241 padding-left: 0;
1242}
1243
1244ol.toc ol.toc {
1245 padding-left: 2ex;
1246 list-style: none;
1247}
1248
1249var {
1250 color: #2aa198;
1251 transition: background-color 0.25s ease;
1252 cursor: pointer;
1253}
1254
1255var.referenced0 {
1256 color: inherit;
1257 background-color: #ffff33;
1258 box-shadow: 0 0 0 2px #ffff33;
1259}
1260var.referenced1 {
1261 color: inherit;
1262 background-color: #ff87a2;
1263 box-shadow: 0 0 0 2px #ff87a2;
1264}
1265var.referenced2 {
1266 color: inherit;
1267 background-color: #96e885;
1268 box-shadow: 0 0 0 2px #96e885;
1269}
1270var.referenced3 {
1271 color: inherit;
1272 background-color: #3eeed2;
1273 box-shadow: 0 0 0 2px #3eeed2;
1274}
1275var.referenced4 {
1276 color: inherit;
1277 background-color: #eacfb6;
1278 box-shadow: 0 0 0 2px #eacfb6;
1279}
1280var.referenced5 {
1281 color: inherit;
1282 background-color: #82ddff;
1283 box-shadow: 0 0 0 2px #82ddff;
1284}
1285var.referenced6 {
1286 color: inherit;
1287 background-color: #ffbcf2;
1288 box-shadow: 0 0 0 2px #ffbcf2;
1289}
1290
1291emu-const {
1292 font-family: sans-serif;
1293}
1294
1295emu-val {
1296 font-weight: bold;
1297}
1298
1299/* depth 1 */
1300emu-alg ol,
1301/* depth 4 */
1302emu-alg ol ol ol ol,
1303emu-alg ol.nested-thrice,
1304emu-alg ol.nested-twice ol,
1305emu-alg ol.nested-once ol ol {
1306 list-style-type: decimal;
1307}
1308
1309/* depth 2 */
1310emu-alg ol ol,
1311emu-alg ol.nested-once,
1312/* depth 5 */
1313emu-alg ol ol ol ol ol,
1314emu-alg ol.nested-four-times,
1315emu-alg ol.nested-thrice ol,
1316emu-alg ol.nested-twice ol ol,
1317emu-alg ol.nested-once ol ol ol {
1318 list-style-type: lower-alpha;
1319}
1320
1321/* depth 3 */
1322emu-alg ol ol ol,
1323emu-alg ol.nested-twice,
1324emu-alg ol.nested-once ol,
1325/* depth 6 */
1326emu-alg ol ol ol ol ol ol,
1327emu-alg ol.nested-lots,
1328emu-alg ol.nested-four-times ol,
1329emu-alg ol.nested-thrice ol ol,
1330emu-alg ol.nested-twice ol ol ol,
1331emu-alg ol.nested-once ol ol ol ol,
1332/* depth 7+ */
1333emu-alg ol.nested-lots ol {
1334 list-style-type: lower-roman;
1335}
1336
1337emu-eqn {
1338 display: block;
1339 margin-left: 4em;
1340}
1341
1342emu-eqn.inline {
1343 display: inline;
1344 margin: 0;
1345}
1346
1347emu-eqn div:first-child {
1348 margin-left: -2em;
1349}
1350
1351emu-note {
1352 margin: 1em 0;
1353 display: flex;
1354 flex-direction: row;
1355 color: inherit;
1356 border-left: 5px solid #52e052;
1357 background: #e9fbe9;
1358 padding: 10px 10px 10px 0;
1359}
1360
1361emu-note > span.note {
1362 flex-basis: 100px;
1363 min-width: 100px;
1364 flex-grow: 0;
1365 flex-shrink: 1;
1366 text-transform: uppercase;
1367 padding-left: 5px;
1368}
1369
1370emu-note[type='editor'] {
1371 border-left-color: #faa;
1372}
1373
1374emu-note > div.note-contents {
1375 flex-grow: 1;
1376 flex-shrink: 1;
1377 overflow: auto;
1378}
1379
1380emu-note > div.note-contents > p:first-of-type {
1381 margin-top: 0;
1382}
1383
1384emu-note > div.note-contents > p:last-of-type {
1385 margin-bottom: 0;
1386}
1387
1388emu-table td code {
1389 white-space: normal;
1390}
1391
1392emu-figure {
1393 display: block;
1394}
1395
1396emu-example {
1397 display: block;
1398 margin: 1em 3em;
1399}
1400
1401emu-example figure figcaption {
1402 margin-top: 0.5em;
1403 text-align: left;
1404}
1405
1406emu-figure figure,
1407emu-example figure,
1408emu-table figure {
1409 display: flex;
1410 flex-direction: column;
1411 align-items: center;
1412}
1413
1414emu-production {
1415 display: block;
1416}
1417
1418emu-grammar[type='example'] emu-production,
1419emu-grammar[type='definition'] emu-production {
1420 margin-top: 1em;
1421 margin-bottom: 1em;
1422 margin-left: 5ex;
1423}
1424
1425emu-grammar.inline,
1426emu-production.inline,
1427emu-grammar.inline emu-production emu-rhs,
1428emu-production.inline emu-rhs,
1429emu-grammar[collapsed] emu-production emu-rhs {
1430 display: inline;
1431 padding-left: 1ex;
1432 margin-left: 0;
1433}
1434
1435emu-production[collapsed] emu-rhs {
1436 display: inline;
1437 padding-left: 0.5ex;
1438 margin-left: 0;
1439}
1440
1441emu-grammar[collapsed] emu-production,
1442emu-production[collapsed] {
1443 margin: 0;
1444}
1445
1446emu-constraints {
1447 font-size: 0.75em;
1448 margin-right: 0.5ex;
1449}
1450
1451emu-gann {
1452 margin-right: 0.5ex;
1453}
1454
1455emu-gann emu-t:last-child,
1456emu-gann emu-gprose:last-child,
1457emu-gann emu-nt:last-child {
1458 margin-right: 0;
1459}
1460
1461emu-geq {
1462 margin-left: 0.5ex;
1463 font-weight: bold;
1464}
1465
1466emu-oneof {
1467 font-weight: bold;
1468 margin-left: 0.5ex;
1469}
1470
1471emu-nt {
1472 display: inline-block;
1473 font-style: italic;
1474 white-space: nowrap;
1475 text-indent: 0;
1476}
1477
1478emu-nt a,
1479emu-nt a:visited {
1480 color: #333;
1481}
1482
1483emu-rhs emu-nt {
1484 margin-right: 0.5ex;
1485}
1486
1487emu-t {
1488 display: inline-block;
1489 font-family: monospace;
1490 font-weight: bold;
1491 white-space: nowrap;
1492 text-indent: 0;
1493}
1494
1495emu-production emu-t {
1496 margin-right: 0.5ex;
1497}
1498
1499emu-rhs {
1500 display: block;
1501 padding-left: 75px;
1502 text-indent: -25px;
1503}
1504
1505emu-production:not([collapsed]) emu-rhs {
1506 border: 0.2ex dashed transparent;
1507}
1508
1509emu-production:not([collapsed]) emu-rhs:hover {
1510 border-color: #888;
1511 background-color: #f0f0f0;
1512}
1513
1514emu-mods {
1515 font-size: 0.85em;
1516 vertical-align: sub;
1517 font-style: normal;
1518 font-weight: normal;
1519}
1520
1521emu-params,
1522emu-opt {
1523 margin-right: 1ex;
1524 font-family: monospace;
1525}
1526
1527emu-params,
1528emu-constraints {
1529 color: #2aa198;
1530}
1531
1532emu-opt {
1533 color: #b58900;
1534}
1535
1536emu-gprose {
1537 font-size: 0.9em;
1538 font-family: Helvetica, Arial, sans-serif;
1539}
1540
1541emu-production emu-gprose {
1542 margin-right: 1ex;
1543}
1544
1545h1.shortname {
1546 color: #f60;
1547 font-size: 1.5em;
1548 margin: 0;
1549}
1550
1551h1.version {
1552 color: #f60;
1553 font-size: 1.5em;
1554}
1555
1556h1.title {
1557 color: #f60;
1558}
1559
1560h1,
1561h2,
1562h3,
1563h4,
1564h5,
1565h6 {
1566 position: relative;
1567}
1568
1569h1 .secnum {
1570 text-decoration: none;
1571 margin-right: 5px;
1572}
1573
1574h1 span.title {
1575 order: 2;
1576}
1577
1578h1 {
1579 font-size: 2.67em;
1580 margin-bottom: 0;
1581 line-height: 1em;
1582}
1583h2 {
1584 font-size: 2em;
1585}
1586h3 {
1587 font-size: 1.56em;
1588}
1589h4 {
1590 font-size: 1.25em;
1591}
1592h5 {
1593 font-size: 1.11em;
1594}
1595h6 {
1596 font-size: 1em;
1597}
1598
1599pre code.hljs {
1600 background: transparent;
1601}
1602
1603emu-clause[id],
1604emu-annex[id],
1605emu-intro[id] {
1606 scroll-margin-top: 2ex;
1607}
1608
1609emu-intro h1,
1610emu-clause h1,
1611emu-annex h1 {
1612 font-size: 2em;
1613}
1614emu-intro h2,
1615emu-clause h2,
1616emu-annex h2 {
1617 font-size: 1.56em;
1618}
1619emu-intro h3,
1620emu-clause h3,
1621emu-annex h3 {
1622 font-size: 1.25em;
1623}
1624emu-intro h4,
1625emu-clause h4,
1626emu-annex h4 {
1627 font-size: 1.11em;
1628}
1629emu-intro h5,
1630emu-clause h5,
1631emu-annex h5 {
1632 font-size: 1em;
1633}
1634emu-intro h6,
1635emu-clause h6,
1636emu-annex h6 {
1637 font-size: 0.9em;
1638}
1639emu-intro emu-intro h1,
1640emu-clause emu-clause h1,
1641emu-annex emu-annex h1 {
1642 font-size: 1.56em;
1643}
1644emu-intro emu-intro h2,
1645emu-clause emu-clause h2,
1646emu-annex emu-annex h2 {
1647 font-size: 1.25em;
1648}
1649emu-intro emu-intro h3,
1650emu-clause emu-clause h3,
1651emu-annex emu-annex h3 {
1652 font-size: 1.11em;
1653}
1654emu-intro emu-intro h4,
1655emu-clause emu-clause h4,
1656emu-annex emu-annex h4 {
1657 font-size: 1em;
1658}
1659emu-intro emu-intro h5,
1660emu-clause emu-clause h5,
1661emu-annex emu-annex h5 {
1662 font-size: 0.9em;
1663}
1664emu-intro emu-intro emu-intro h1,
1665emu-clause emu-clause emu-clause h1,
1666emu-annex emu-annex emu-annex h1 {
1667 font-size: 1.25em;
1668}
1669emu-intro emu-intro emu-intro h2,
1670emu-clause emu-clause emu-clause h2,
1671emu-annex emu-annex emu-annex h2 {
1672 font-size: 1.11em;
1673}
1674emu-intro emu-intro emu-intro h3,
1675emu-clause emu-clause emu-clause h3,
1676emu-annex emu-annex emu-annex h3 {
1677 font-size: 1em;
1678}
1679emu-intro emu-intro emu-intro h4,
1680emu-clause emu-clause emu-clause h4,
1681emu-annex emu-annex emu-annex h4 {
1682 font-size: 0.9em;
1683}
1684emu-intro emu-intro emu-intro emu-intro h1,
1685emu-clause emu-clause emu-clause emu-clause h1,
1686emu-annex emu-annex emu-annex emu-annex h1 {
1687 font-size: 1.11em;
1688}
1689emu-intro emu-intro emu-intro emu-intro h2,
1690emu-clause emu-clause emu-clause emu-clause h2,
1691emu-annex emu-annex emu-annex emu-annex h2 {
1692 font-size: 1em;
1693}
1694emu-intro emu-intro emu-intro emu-intro h3,
1695emu-clause emu-clause emu-clause emu-clause h3,
1696emu-annex emu-annex emu-annex emu-annex h3 {
1697 font-size: 0.9em;
1698}
1699emu-intro emu-intro emu-intro emu-intro emu-intro h1,
1700emu-clause emu-clause emu-clause emu-clause emu-clause h1,
1701emu-annex emu-annex emu-annex emu-annex emu-annex h1 {
1702 font-size: 1em;
1703}
1704emu-intro emu-intro emu-intro emu-intro emu-intro h2,
1705emu-clause emu-clause emu-clause emu-clause emu-clause h2,
1706emu-annex emu-annex emu-annex emu-annex emu-annex h2 {
1707 font-size: 0.9em;
1708}
1709emu-intro emu-intro emu-intro emu-intro emu-intro emu-intro h1,
1710emu-clause emu-clause emu-clause emu-clause emu-clause emu-clause h1,
1711emu-annex emu-annex emu-annex emu-annex emu-annex emu-annex h1 {
1712 font-size: 0.9em;
1713}
1714
1715emu-clause,
1716emu-intro,
1717emu-annex {
1718 display: block;
1719}
1720
1721/* these values are twice the font-size for the <h1> titles for clauses */
1722emu-intro,
1723emu-clause,
1724emu-annex {
1725 margin-top: 4em;
1726}
1727emu-intro emu-intro,
1728emu-clause emu-clause,
1729emu-annex emu-annex {
1730 margin-top: 3.12em;
1731}
1732emu-intro emu-intro emu-intro,
1733emu-clause emu-clause emu-clause,
1734emu-annex emu-annex emu-annex {
1735 margin-top: 2.5em;
1736}
1737emu-intro emu-intro emu-intro emu-intro,
1738emu-clause emu-clause emu-clause emu-clause,
1739emu-annex emu-annex emu-annex emu-annex {
1740 margin-top: 2.22em;
1741}
1742emu-intro emu-intro emu-intro emu-intro emu-intro,
1743emu-clause emu-clause emu-clause emu-clause emu-clause,
1744emu-annex emu-annex emu-annex emu-annex emu-annex {
1745 margin-top: 2em;
1746}
1747emu-intro emu-intro emu-intro emu-intro emu-intro emu-intro,
1748emu-clause emu-clause emu-clause emu-clause emu-clause emu-clause,
1749emu-annex emu-annex emu-annex emu-annex emu-annex emu-annex {
1750 margin-top: 1.8em;
1751}
1752
1753#spec-container > emu-intro:first-of-type,
1754#spec-container > emu-clause:first-of-type,
1755#spec-container > emu-annex:first-of-type {
1756 margin-top: 0;
1757}
1758
1759/* Figures and tables */
1760figure {
1761 display: block;
1762 margin: 1em 0 3em 0;
1763}
1764figure object {
1765 display: block;
1766 margin: 0 auto;
1767}
1768figure table.real-table {
1769 margin: 0 auto;
1770}
1771figure figcaption {
1772 display: block;
1773 color: #555555;
1774 font-weight: bold;
1775 text-align: center;
1776}
1777
1778emu-table table {
1779 margin: 0 auto;
1780}
1781
1782emu-table table,
1783table.real-table {
1784 border-collapse: collapse;
1785}
1786
1787emu-table td,
1788emu-table th,
1789table.real-table td,
1790table.real-table th {
1791 border: 1px solid black;
1792 padding: 0.4em;
1793 vertical-align: baseline;
1794}
1795emu-table th,
1796emu-table thead td,
1797table.real-table th {
1798 background-color: #eeeeee;
1799}
1800
1801emu-table td {
1802 background: #fff;
1803}
1804
1805/* Note: the left content edges of table.lightweight-table >tbody >tr >td
1806 and div.display line up. */
1807table.lightweight-table {
1808 border-collapse: collapse;
1809 margin: 0 0 0 1.5em;
1810}
1811table.lightweight-table td,
1812table.lightweight-table th {
1813 border: none;
1814 padding: 0 0.5em;
1815 vertical-align: baseline;
1816}
1817
1818/* diff styles */
1819ins {
1820 background-color: #e0f8e0;
1821 text-decoration: none;
1822 border-bottom: 1px solid #396;
1823}
1824
1825del {
1826 background-color: #fee;
1827}
1828
1829ins.block,
1830del.block,
1831emu-production > ins,
1832emu-production > del,
1833emu-grammar > ins,
1834emu-grammar > del {
1835 display: block;
1836}
1837emu-rhs > ins,
1838emu-rhs > del {
1839 display: inline;
1840}
1841
1842tr.ins > td > ins {
1843 border-bottom: none;
1844}
1845
1846tr.ins > td {
1847 background-color: #e0f8e0;
1848}
1849
1850tr.del > td {
1851 background-color: #fee;
1852}
1853
1854/* Menu Styles */
1855#menu-toggle {
1856 font-size: 2em;
1857
1858 position: fixed;
1859 top: 0;
1860 left: 0;
1861 width: 1.5em;
1862 height: 1.5em;
1863 z-index: 3;
1864 visibility: hidden;
1865 color: #1567a2;
1866 background-color: #fff;
1867
1868 line-height: 1.5em;
1869 text-align: center;
1870 -webkit-touch-callout: none;
1871 -webkit-user-select: none;
1872 -khtml-user-select: none;
1873 -moz-user-select: none;
1874 -ms-user-select: none;
1875 user-select: none;
1876
1877 cursor: pointer;
1878}
1879
1880#menu {
1881 display: flex;
1882 flex-direction: column;
1883 width: 33%;
1884 height: 100vh;
1885 max-width: 500px;
1886 box-sizing: border-box;
1887 background-color: #ddd;
1888 overflow: hidden;
1889 transition: opacity 0.1s linear;
1890 padding: 0 5px;
1891 position: fixed;
1892 left: 0;
1893 top: 0;
1894 border-right: 2px solid #bbb;
1895
1896 z-index: 2;
1897}
1898
1899#menu-spacer {
1900 flex-basis: 33%;
1901 max-width: 500px;
1902 flex-grow: 0;
1903 flex-shrink: 0;
1904}
1905
1906#menu a {
1907 color: #1567a2;
1908}
1909
1910#menu.active {
1911 display: flex;
1912 opacity: 1;
1913 z-index: 2;
1914}
1915
1916#menu-pins {
1917 flex-grow: 1;
1918 display: none;
1919}
1920
1921#menu-pins.active {
1922 display: block;
1923}
1924
1925#menu-pins-list {
1926 margin: 0;
1927 padding: 0;
1928 counter-reset: pins-counter;
1929}
1930
1931#menu-pins-list > li:before {
1932 content: counter(pins-counter);
1933 counter-increment: pins-counter;
1934 display: inline-block;
1935 width: 25px;
1936 text-align: center;
1937 border: 1px solid #bbb;
1938 padding: 2px;
1939 margin: 4px;
1940 box-sizing: border-box;
1941 line-height: 1em;
1942 background-color: #ccc;
1943 border-radius: 4px;
1944}
1945#menu-toc > ol {
1946 padding: 0;
1947 flex-grow: 1;
1948}
1949
1950#menu-toc > ol li {
1951 padding: 0;
1952}
1953
1954#menu-toc > ol,
1955#menu-toc > ol ol {
1956 list-style-type: none;
1957 margin: 0;
1958 padding: 0;
1959}
1960
1961#menu-toc > ol ol {
1962 padding-left: 0.75em;
1963}
1964
1965#menu-toc li {
1966 text-overflow: ellipsis;
1967 overflow: hidden;
1968 white-space: nowrap;
1969}
1970
1971#menu-toc .item-toggle {
1972 display: inline-block;
1973 transform: rotate(-45deg) translate(-5px, -5px);
1974 transition: transform 0.1s ease;
1975 text-align: center;
1976 width: 20px;
1977
1978 color: #aab;
1979
1980 -webkit-touch-callout: none;
1981 -webkit-user-select: none;
1982 -khtml-user-select: none;
1983 -moz-user-select: none;
1984 -ms-user-select: none;
1985 user-select: none;
1986
1987 cursor: pointer;
1988}
1989
1990#menu-toc .item-toggle-none {
1991 display: inline-block;
1992 width: 20px;
1993}
1994
1995#menu-toc li.active > .item-toggle {
1996 transform: rotate(45deg) translate(-5px, -5px);
1997}
1998
1999#menu-toc li > ol {
2000 display: none;
2001}
2002
2003#menu-toc li.active > ol {
2004 display: block;
2005}
2006
2007#menu-toc li.revealed > a {
2008 background-color: #bbb;
2009 font-weight: bold;
2010 /*
2011 background-color: #222;
2012 color: #c6d8e4;
2013 */
2014}
2015
2016#menu-toc li.revealed-leaf > a {
2017 color: #206ca7;
2018 /*
2019 background-color: #222;
2020 color: #c6d8e4;
2021 */
2022}
2023
2024#menu-toc li.revealed > .item-toggle {
2025 transform: rotate(45deg) translate(-5px, -5px);
2026}
2027
2028#menu-toc li.revealed > ol {
2029 display: block;
2030}
2031
2032#menu-toc li > a {
2033 padding: 2px 5px;
2034}
2035
2036#menu > * {
2037 margin-bottom: 5px;
2038}
2039
2040.menu-pane-header {
2041 padding: 0 5px;
2042 text-transform: uppercase;
2043 background-color: #aaa;
2044 color: #335;
2045 font-weight: bold;
2046 letter-spacing: 2px;
2047 flex-grow: 0;
2048 flex-shrink: 0;
2049 font-size: 0.8em;
2050}
2051
2052.menu-pane-header emu-opt,
2053.menu-pane-header emu-t,
2054.menu-pane-header emu-nt {
2055 margin-right: 0px;
2056 display: inline;
2057 color: inherit;
2058}
2059
2060.menu-pane-header emu-rhs {
2061 display: inline;
2062 padding-left: 0px;
2063 text-indent: 0px;
2064}
2065
2066.menu-pane-header emu-geq {
2067 margin-left: 0px;
2068}
2069
2070a.menu-pane-header-production {
2071 color: inherit;
2072}
2073
2074.menu-pane-header-production {
2075 text-transform: none;
2076 letter-spacing: 1.5px;
2077 padding-left: 0.5em;
2078}
2079
2080#menu-toc {
2081 display: flex;
2082 flex-direction: column;
2083 width: 100%;
2084 overflow: hidden;
2085 flex-grow: 1;
2086}
2087
2088#menu-toc ol.toc {
2089 overflow-x: hidden;
2090 overflow-y: auto;
2091}
2092
2093#menu-search {
2094 position: relative;
2095 flex-grow: 0;
2096 flex-shrink: 0;
2097 width: 100%;
2098
2099 display: flex;
2100 flex-direction: column;
2101
2102 max-height: 300px;
2103}
2104
2105#menu-trace-list {
2106 display: none;
2107}
2108
2109#menu-search-box {
2110 box-sizing: border-box;
2111 display: block;
2112 width: 100%;
2113 margin: 5px 0 0 0;
2114 font-size: 1em;
2115 padding: 2px;
2116 background-color: #bbb;
2117 border: 1px solid #999;
2118}
2119
2120#menu-search-results {
2121 overflow-x: hidden;
2122 overflow-y: auto;
2123}
2124
2125li.menu-search-result-clause:before {
2126 content: 'clause';
2127 width: 40px;
2128 display: inline-block;
2129 text-align: right;
2130 padding-right: 1ex;
2131 color: #666;
2132 font-size: 75%;
2133}
2134li.menu-search-result-op:before {
2135 content: 'op';
2136 width: 40px;
2137 display: inline-block;
2138 text-align: right;
2139 padding-right: 1ex;
2140 color: #666;
2141 font-size: 75%;
2142}
2143
2144li.menu-search-result-prod:before {
2145 content: 'prod';
2146 width: 40px;
2147 display: inline-block;
2148 text-align: right;
2149 padding-right: 1ex;
2150 color: #666;
2151 font-size: 75%;
2152}
2153
2154li.menu-search-result-term:before {
2155 content: 'term';
2156 width: 40px;
2157 display: inline-block;
2158 text-align: right;
2159 padding-right: 1ex;
2160 color: #666;
2161 font-size: 75%;
2162}
2163
2164#menu-search-results ul {
2165 padding: 0 5px;
2166 margin: 0;
2167}
2168
2169#menu-search-results li {
2170 white-space: nowrap;
2171 text-overflow: ellipsis;
2172}
2173
2174#menu-trace-list {
2175 counter-reset: item;
2176 margin: 0 0 0 20px;
2177 padding: 0;
2178}
2179#menu-trace-list li {
2180 display: block;
2181 white-space: nowrap;
2182}
2183
2184#menu-trace-list li .secnum:after {
2185 content: ' ';
2186}
2187#menu-trace-list li:before {
2188 content: counter(item) ' ';
2189 background-color: #222;
2190 counter-increment: item;
2191 color: #999;
2192 width: 20px;
2193 height: 20px;
2194 line-height: 20px;
2195 display: inline-block;
2196 text-align: center;
2197 margin: 2px 4px 2px 0;
2198}
2199
2200@media (max-width: 1000px) {
2201 body {
2202 margin: 0;
2203 display: block;
2204 }
2205
2206 #menu {
2207 display: none;
2208 padding-top: 3em;
2209 width: 450px;
2210 }
2211
2212 #menu.active {
2213 position: fixed;
2214 height: 100%;
2215 left: 0;
2216 top: 0;
2217 right: 300px;
2218 }
2219
2220 #menu-toggle {
2221 visibility: visible;
2222 }
2223
2224 #spec-container {
2225 padding: 0 5px;
2226 }
2227
2228 #references-pane-spacer {
2229 display: none;
2230 }
2231}
2232
2233@media only screen and (max-width: 800px) {
2234 #menu {
2235 width: 100%;
2236 }
2237
2238 h1 .secnum:empty {
2239 margin: 0;
2240 padding: 0;
2241 }
2242}
2243
2244/* Toolbox */
2245.toolbox-container {
2246 position: absolute;
2247 display: none;
2248 padding-bottom: 7px;
2249}
2250
2251.toolbox-container.active {
2252 display: inline-block;
2253}
2254
2255.toolbox {
2256 position: relative;
2257 background: #ddd;
2258 border: 1px solid #aaa;
2259 color: #eee;
2260 padding: 5px;
2261 border-radius: 3px;
2262}
2263
2264.toolbox a {
2265 text-decoration: none;
2266 padding: 0 5px;
2267}
2268
2269.toolbox a:hover {
2270 text-decoration: underline;
2271}
2272
2273.toolbox:after,
2274.toolbox:before {
2275 top: 100%;
2276 left: 15px;
2277 border: solid transparent;
2278 content: ' ';
2279 height: 0;
2280 width: 0;
2281 position: absolute;
2282 pointer-events: none;
2283}
2284
2285.toolbox:after {
2286 border-color: rgba(0, 0, 0, 0);
2287 border-top-color: #ddd;
2288 border-width: 10px;
2289 margin-left: -10px;
2290}
2291.toolbox:before {
2292 border-color: rgba(204, 204, 204, 0);
2293 border-top-color: #aaa;
2294 border-width: 12px;
2295 margin-left: -12px;
2296}
2297
2298#references-pane-container {
2299 position: fixed;
2300 bottom: 0;
2301 left: 0;
2302 right: 0;
2303 height: 250px;
2304 display: none;
2305 background-color: #ddd;
2306 z-index: 1;
2307}
2308
2309#references-pane-table-container {
2310 overflow-x: hidden;
2311 overflow-y: auto;
2312}
2313
2314#references-pane-spacer {
2315 flex-basis: 33%;
2316 max-width: 500px;
2317}
2318
2319#references-pane {
2320 flex-grow: 1;
2321 overflow: hidden;
2322 display: flex;
2323 flex-direction: column;
2324}
2325
2326#references-pane-container.active {
2327 display: flex;
2328}
2329
2330#references-pane-close:after {
2331 content: '✖';
2332 float: right;
2333 cursor: pointer;
2334}
2335
2336#references-pane table tr td:first-child {
2337 text-align: right;
2338 padding-right: 5px;
2339}
2340
2341@media print {
2342 #menu-toggle {
2343 display: none;
2344 }
2345}
2346
2347[normative-optional],
2348[legacy] {
2349 border-left: 5px solid #ff6600;
2350 padding: 0.5em;
2351 display: block;
2352 background: #ffeedd;
2353}
2354
2355.clause-attributes-tag {
2356 text-transform: uppercase;
2357 color: #884400;
2358}
2359
2360.clause-attributes-tag a {
2361 color: #884400;
2362}
2363
2364/* Shortcuts help dialog */
2365
2366#shortcuts-help {
2367 position: fixed;
2368 left: 5%;
2369 margin: 0 auto;
2370 right: 5%;
2371 z-index: 10;
2372 top: 10%;
2373 top: calc(5vw + 5vh);
2374 padding: 30px 90px;
2375 max-width: 500px;
2376 outline: solid 10000px rgba(255, 255, 255, 0.6);
2377 border-radius: 5px;
2378 border-width: 1px 1px 0 1px;
2379 background-color: #ddd;
2380 display: none;
2381}
2382
2383#shortcuts-help.active {
2384 display: block;
2385}
2386
2387#shortcuts-help ul {
2388 padding: 0;
2389}
2390
2391#shortcuts-help li {
2392 display: flex;
2393 justify-content: space-between;
2394}
2395
2396#shortcuts-help code {
2397 padding: 3px 10px;
2398 border-radius: 3px;
2399 border-width: 1px 1px 0 1px;
2400 border-color: #bbb;
2401 background-color: #eee;
2402 box-shadow: inset 0 -1px 0 #ccc;
2403}
2404</style></head><body><div id="shortcuts-help">
2405<ul>
2406 <li><span>Toggle shortcuts help</span><code>?</code></li>
2407 <li><span>Toggle "can call user code" annotations</span><code>u</code></li>
2408
2409 <li><span>Jump to search box</span><code>/</code></li>
2410</ul></div><div id="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%; stroke:currentColor" viewBox="0 0 120 120">
2411 <title>Menu</title>
2412 <path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
2413 </svg></div><div id="menu-spacer"></div><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins</div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="#intro" title="Introduction">Introduction</a></li><li><span class="item-toggle-none"></span><a href="#lexical-grammar" title="Lexical Grammar"><span class="secnum">1</span> Lexical Grammar</a></li><li><span class="item-toggle-none"></span><a href="#syntactic-grammar" title="Syntactic Grammar"><span class="secnum">2</span> Syntactic Grammar</a></li></ol></div></div><div id="spec-container">
2414
2415<emu-intro id="intro">
2416<h1>Introduction</h1>
2417<p>This document will eventually have a full specification for Cadl. For now, it just has the grammar below.</p>
2418</emu-intro>
2419
2420<emu-clause id="lexical-grammar">
2421<h1><span class="secnum">1</span> Lexical Grammar</h1>
2422<emu-grammar type="definition"><emu-production name="SourceCharacter" id="prod-SourceCharacter">
2423 <emu-nt><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xks4vqzw"><emu-gprose>any Unicode code point</emu-gprose></emu-rhs>
2424</emu-production>
2425<emu-production name="InputElement" id="prod-InputElement">
2426 <emu-nt><a href="#prod-InputElement">InputElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="orqeuwg2"><emu-nt id="_ref_0"><a href="#prod-Token">Token</a></emu-nt></emu-rhs>
2427 <emu-rhs a="kg5yghiq"><emu-nt id="_ref_1"><a href="#prod-Trivia">Trivia</a></emu-nt></emu-rhs>
2428</emu-production>
2429<emu-production name="Token" id="prod-Token">
2430 <emu-nt><a href="#prod-Token">Token</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="o5jua5_x"><emu-nt id="_ref_2"><a href="#prod-Keyword">Keyword</a></emu-nt></emu-rhs>
2431 <emu-rhs a="bras6mo_"><emu-nt id="_ref_3"><a href="#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
2432 <emu-rhs a="pui0b1rt"><emu-nt id="_ref_4"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt></emu-rhs>
2433 <emu-rhs a="xhtltz00"><emu-nt id="_ref_5"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
2434 <emu-rhs a="7hjz1m8p"><emu-nt id="_ref_6"><a href="#prod-Punctuator">Punctuator</a></emu-nt></emu-rhs>
2435</emu-production>
2436<emu-production name="Trivia" id="prod-Trivia">
2437 <emu-nt><a href="#prod-Trivia">Trivia</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ft16wloj"><emu-nt id="_ref_7"><a href="#prod-Comment">Comment</a></emu-nt></emu-rhs>
2438 <emu-rhs a="fctcswat"><emu-nt id="_ref_8"><a href="#prod-WhiteSpace">WhiteSpace</a></emu-nt></emu-rhs>
2439</emu-production>
2440<emu-production name="Keyword" id="prod-Keyword">
2441 <emu-nt><a href="#prod-Keyword">Keyword</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nqjh_sxl"><emu-nt id="_ref_9"><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt></emu-rhs>
2442 <emu-rhs a="azcs9apw"><emu-t>import</emu-t></emu-rhs>
2443 <emu-rhs a="-mdwbm0b"><emu-t>model</emu-t></emu-rhs>
2444 <emu-rhs a="lpev-y-g"><emu-t>namespace</emu-t></emu-rhs>
2445 <emu-rhs a="ytodrzn0"><emu-t>op</emu-t></emu-rhs>
2446 <emu-rhs a="rmwjtwx9"><emu-t>extends</emu-t></emu-rhs>
2447 <emu-rhs a="8d2nu2lj"><emu-t>using</emu-t></emu-rhs>
2448 <emu-rhs a="71rsbeuh"><emu-t>interface</emu-t></emu-rhs>
2449 <emu-rhs a="hgzzvb8j"><emu-t>union</emu-t></emu-rhs>
2450 <emu-rhs a="4iwu-ggn"><emu-t>projection</emu-t></emu-rhs>
2451 <emu-rhs a="llgnlz3m"><emu-t>void</emu-t></emu-rhs>
2452 <emu-rhs a="vpa-nv19"><emu-t>never</emu-t></emu-rhs>
2453</emu-production>
2454<emu-production name="Identifier" id="prod-Identifier">
2455 <emu-nt><a href="#prod-Identifier">Identifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exwdmcdi"><emu-nt id="_ref_10"><a href="#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_11"><a href="#prod-Keyword">Keyword</a></emu-nt></emu-gmod></emu-rhs>
2456</emu-production>
2457<emu-production name="IdentifierName" id="prod-IdentifierName">
2458 <emu-nt><a href="#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="q0afq8g8"><emu-nt id="_ref_12"><a href="#prod-IdentifierStart">IdentifierStart</a></emu-nt></emu-rhs>
2459 <emu-rhs a="amguopqs">
2460 <emu-nt id="_ref_13"><a href="#prod-IdentifierName">IdentifierName</a></emu-nt>
2461 <emu-nt id="_ref_14"><a href="#prod-IdentifierContinue">IdentifierContinue</a></emu-nt>
2462 </emu-rhs>
2463</emu-production>
2464<emu-production name="IdentifierStart" id="prod-IdentifierStart">
2465 <emu-nt><a href="#prod-IdentifierStart">IdentifierStart</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exubo7yu"><emu-nt id="_ref_15"><a href="#prod-IdentifierContinue">IdentifierContinue</a></emu-nt> <emu-gmod>but not <emu-nt id="_ref_16"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt></emu-gmod></emu-rhs>
2466</emu-production>
2467<emu-production name="IdentifierContinue" id="prod-IdentifierContinue">
2468 <emu-nt><a href="#prod-IdentifierContinue">IdentifierContinue</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7q8tumk4"><emu-nt id="_ref_17"><a href="#prod-AsciiLetter">AsciiLetter</a></emu-nt></emu-rhs>
2469 <emu-rhs a="s4me4hlz"><emu-nt id="_ref_18"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt></emu-rhs>
2470 <emu-rhs a="emlmkqfm"><emu-t>$</emu-t></emu-rhs>
2471 <emu-rhs a="b1zllonv"><emu-t>_</emu-t></emu-rhs>
2472 <emu-rhs a="bpnwye-j"><emu-gprose>any assigned Unicode code point greater than U+007F that does not have any of the following property values: General_Category=Surrogate, Control or Private_Use, Noncharacter_Code_Point=True, or Pattern_White_Space=True</emu-gprose></emu-rhs>
2473</emu-production>
2474<emu-production name="AsciiLetter" oneof="" id="prod-AsciiLetter">
2475 <emu-nt><a href="#prod-AsciiLetter">AsciiLetter</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>A</emu-t> <emu-t>B</emu-t> <emu-t>C</emu-t> <emu-t>D</emu-t> <emu-t>E</emu-t> <emu-t>F</emu-t> <emu-t>G</emu-t> <emu-t>H</emu-t> <emu-t>I</emu-t> <emu-t>J</emu-t> <emu-t>K</emu-t> <emu-t>L</emu-t> <emu-t>M</emu-t> <emu-t>N</emu-t> <emu-t>O</emu-t> <emu-t>P</emu-t> <emu-t>Q</emu-t> <emu-t>R</emu-t> <emu-t>S</emu-t> <emu-t>T</emu-t> <emu-t>U</emu-t> <emu-t>V</emu-t> <emu-t>W</emu-t> <emu-t>X</emu-t> <emu-t>Y</emu-t> <emu-t>Z</emu-t> <emu-t>a</emu-t> <emu-t>b</emu-t> <emu-t>c</emu-t> <emu-t>d</emu-t> <emu-t>e</emu-t> <emu-t>f</emu-t> <emu-t>g</emu-t> <emu-t>h</emu-t> <emu-t>i</emu-t> <emu-t>j</emu-t> <emu-t>k</emu-t> <emu-t>l</emu-t> <emu-t>m</emu-t> <emu-t>n</emu-t> <emu-t>o</emu-t> <emu-t>p</emu-t> <emu-t>q</emu-t> <emu-t>r</emu-t> <emu-t>s</emu-t> <emu-t>t</emu-t> <emu-t>u</emu-t> <emu-t>v</emu-t> <emu-t>w</emu-t> <emu-t>x</emu-t> <emu-t>y</emu-t> <emu-t>z</emu-t></emu-rhs>
2476</emu-production>
2477<emu-production name="BooleanLiteral" id="prod-BooleanLiteral">
2478 <emu-nt><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-jc4xg27"><emu-t>true</emu-t></emu-rhs>
2479 <emu-rhs a="i9lgnxtt"><emu-t>false</emu-t></emu-rhs>
2480</emu-production>
2481<emu-production name="NumericLiteral" id="prod-NumericLiteral">
2482 <emu-nt><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gma1bw5s"><emu-nt id="_ref_19"><a href="#prod-DecimalLiteral">DecimalLiteral</a></emu-nt></emu-rhs>
2483 <emu-rhs a="hqxkzjla"><emu-nt id="_ref_20"><a href="#prod-HexIntegerLiteral">HexIntegerLiteral</a></emu-nt></emu-rhs>
2484 <emu-rhs a="09cd3aiw"><emu-nt id="_ref_21"><a href="#prod-BinaryIntegerLiteral">BinaryIntegerLiteral</a></emu-nt></emu-rhs>
2485</emu-production>
2486<emu-production name="DecimalLiteral" id="prod-DecimalLiteral">
2487 <emu-nt><a href="#prod-DecimalLiteral">DecimalLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3xiaxvcb">
2488 <emu-nt id="_ref_22"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2489 <emu-t>.</emu-t>
2490 <emu-nt id="_ref_23"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2491 <emu-nt optional="" id="_ref_24"><a href="#prod-ExponentPart">ExponentPart</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2492 </emu-rhs>
2493 <emu-rhs a="e9uvir9w">
2494 <emu-nt id="_ref_25"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2495 <emu-nt optional="" id="_ref_26"><a href="#prod-ExponentPart">ExponentPart</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2496 </emu-rhs>
2497</emu-production>
2498<emu-production name="DecimalIntegerLiteral" id="prod-DecimalIntegerLiteral">
2499 <emu-nt><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxtox5eb"><emu-nt id="_ref_27"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt></emu-rhs>
2500 <emu-rhs a="o9f-v3mh">
2501 <emu-t>+</emu-t>
2502 <emu-nt id="_ref_28"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2503 </emu-rhs>
2504 <emu-rhs a="waadsnwo">
2505 <emu-t>-</emu-t>
2506 <emu-nt id="_ref_29"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2507 </emu-rhs>
2508</emu-production>
2509<emu-production name="DecimalDigits" id="prod-DecimalDigits">
2510 <emu-nt><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s4me4hlz"><emu-nt id="_ref_30"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt></emu-rhs>
2511 <emu-rhs a="nyugv7lw">
2512 <emu-nt id="_ref_31"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2513 <emu-nt id="_ref_32"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt>
2514 </emu-rhs>
2515</emu-production>
2516<emu-production name="DecimalDigit" oneof="" id="prod-DecimalDigit">
2517 <emu-nt><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>0</emu-t> <emu-t>1</emu-t> <emu-t>2</emu-t> <emu-t>3</emu-t> <emu-t>4</emu-t> <emu-t>5</emu-t> <emu-t>6</emu-t> <emu-t>7</emu-t> <emu-t>8</emu-t> <emu-t>9</emu-t></emu-rhs>
2518</emu-production>
2519<emu-production name="ExponentPart" id="prod-ExponentPart">
2520 <emu-nt><a href="#prod-ExponentPart">ExponentPart</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jb-iaug">
2521 <emu-t>e</emu-t>
2522 <emu-nt id="_ref_33"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2523 </emu-rhs>
2524</emu-production>
2525<emu-production name="DecimalIntegerInteger" id="prod-DecimalIntegerInteger">
2526 <emu-nt><a href="#prod-DecimalIntegerInteger">DecimalIntegerInteger</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxtox5eb"><emu-nt id="_ref_34"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt></emu-rhs>
2527 <emu-rhs a="o9f-v3mh">
2528 <emu-t>+</emu-t>
2529 <emu-nt id="_ref_35"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2530 </emu-rhs>
2531 <emu-rhs a="waadsnwo">
2532 <emu-t>-</emu-t>
2533 <emu-nt id="_ref_36"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2534 </emu-rhs>
2535</emu-production>
2536<emu-production name="HexIntegerLiteral" id="prod-HexIntegerLiteral">
2537 <emu-nt><a href="#prod-HexIntegerLiteral">HexIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zxvbgn4l">
2538 <emu-t>0x</emu-t>
2539 <emu-nt id="_ref_37"><a href="#prod-HexDigits">HexDigits</a></emu-nt>
2540 </emu-rhs>
2541</emu-production>
2542<emu-production name="HexDigits" id="prod-HexDigits">
2543 <emu-nt><a href="#prod-HexDigits">HexDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="omskcs0d"><emu-nt id="_ref_38"><a href="#prod-HexDigit">HexDigit</a></emu-nt></emu-rhs>
2544 <emu-rhs a="yciymy2l">
2545 <emu-nt id="_ref_39"><a href="#prod-HexDigits">HexDigits</a></emu-nt>
2546 <emu-nt id="_ref_40"><a href="#prod-HexDigit">HexDigit</a></emu-nt>
2547 </emu-rhs>
2548</emu-production>
2549<emu-production name="HexDigit" oneof="" id="prod-HexDigit">
2550 <emu-nt><a href="#prod-HexDigit">HexDigit</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>0</emu-t> <emu-t>1</emu-t> <emu-t>2</emu-t> <emu-t>3</emu-t> <emu-t>4</emu-t> <emu-t>5</emu-t> <emu-t>6</emu-t> <emu-t>7</emu-t> <emu-t>8</emu-t> <emu-t>9</emu-t> <emu-t>A</emu-t> <emu-t>B</emu-t> <emu-t>C</emu-t> <emu-t>D</emu-t> <emu-t>E</emu-t> <emu-t>F</emu-t> <emu-t>a</emu-t> <emu-t>b</emu-t> <emu-t>c</emu-t> <emu-t>d</emu-t> <emu-t>e</emu-t> <emu-t>f</emu-t></emu-rhs>
2551</emu-production>
2552<emu-production name="BinaryIntegerLiteral" id="prod-BinaryIntegerLiteral">
2553 <emu-nt><a href="#prod-BinaryIntegerLiteral">BinaryIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ya14f57w">
2554 <emu-t>0b</emu-t>
2555 <emu-nt id="_ref_41"><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt>
2556 </emu-rhs>
2557</emu-production>
2558<emu-production name="BinaryDigits" id="prod-BinaryDigits">
2559 <emu-nt><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5fhui2lc"><emu-nt id="_ref_42"><a href="#prod-BinaryDigit">BinaryDigit</a></emu-nt></emu-rhs>
2560 <emu-rhs a="gqp0qw4u">
2561 <emu-nt id="_ref_43"><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt>
2562 <emu-nt id="_ref_44"><a href="#prod-BinaryDigit">BinaryDigit</a></emu-nt>
2563 </emu-rhs>
2564</emu-production>
2565<emu-production name="BinaryDigit" oneof="" id="prod-BinaryDigit">
2566 <emu-nt><a href="#prod-BinaryDigit">BinaryDigit</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>0</emu-t> <emu-t>1</emu-t></emu-rhs>
2567</emu-production>
2568<emu-production name="StringLiteral" id="prod-StringLiteral">
2569 <emu-nt><a href="#prod-StringLiteral">StringLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vxwiv5cv">
2570 <emu-t>"</emu-t>
2571 <emu-nt optional="" id="_ref_45"><a href="#prod-StringCharacters">StringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2572 <emu-t>"</emu-t>
2573 </emu-rhs>
2574 <emu-rhs a="rvjavihc">
2575 <emu-t>"""</emu-t>
2576 <emu-nt optional="" id="_ref_46"><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2577 <emu-t>"""</emu-t>
2578 </emu-rhs>
2579</emu-production>
2580<emu-production name="StringCharacters" id="prod-StringCharacters">
2581 <emu-nt><a href="#prod-StringCharacters">StringCharacters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dwizkn7f">
2582 <emu-nt id="_ref_47"><a href="#prod-StringCharacter">StringCharacter</a></emu-nt>
2583 <emu-nt optional="" id="_ref_48"><a href="#prod-StringCharacters">StringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2584 </emu-rhs>
2585</emu-production>
2586<emu-production name="StringCharacter" id="prod-StringCharacter">
2587 <emu-nt><a href="#prod-StringCharacter">StringCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qh-v7bpd"><emu-nt id="_ref_49"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>"</emu-t> or <emu-t>\</emu-t> or <emu-nt><a href="https://tc39.es/ecma262/#prod-LineTerminator">LineTerminator</a></emu-nt></emu-gmod></emu-rhs>
2588 <emu-rhs a="o0wqskax">
2589 <emu-t>\</emu-t>
2590 <emu-nt id="_ref_50"><a href="#prod-EscapeCharacter">EscapeCharacter</a></emu-nt>
2591 </emu-rhs>
2592</emu-production>
2593<emu-production name="TripleQuotedStringCharacters" id="prod-TripleQuotedStringCharacters">
2594 <emu-nt><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w2enq7kq">
2595 <emu-nt id="_ref_51"><a href="#prod-TripleQuotedStringCharacter">TripleQuotedStringCharacter</a></emu-nt>
2596 <emu-nt optional="" id="_ref_52"><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2597 </emu-rhs>
2598</emu-production>
2599<emu-production name="TripleQuotedStringCharacter" id="prod-TripleQuotedStringCharacter">
2600 <emu-nt><a href="#prod-TripleQuotedStringCharacter">TripleQuotedStringCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ulzuti3k"><emu-nt id="_ref_53"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>"</emu-t> or <emu-t>\</emu-t></emu-gmod></emu-rhs>
2601 <emu-rhs a="o0wqskax">
2602 <emu-t>\</emu-t>
2603 <emu-nt id="_ref_54"><a href="#prod-EscapeCharacter">EscapeCharacter</a></emu-nt>
2604 </emu-rhs>
2605</emu-production>
2606<emu-production name="EscapeCharacter" oneof="" id="prod-EscapeCharacter">
2607 <emu-nt><a href="#prod-EscapeCharacter">EscapeCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>"</emu-t> <emu-t>r</emu-t> <emu-t>n</emu-t> <emu-t>t</emu-t> <emu-t>\</emu-t></emu-rhs>
2608</emu-production>
2609<emu-production name="Punctuator" oneof="" id="prod-Punctuator">
2610 <emu-nt><a href="#prod-Punctuator">Punctuator</a></emu-nt> <emu-geq>:</emu-geq> <emu-oneof>one of</emu-oneof> <emu-rhs><emu-t>|</emu-t> <emu-t>?</emu-t> <emu-t>=</emu-t> <emu-t>&amp;</emu-t> <emu-t>:</emu-t> <emu-t>,</emu-t> <emu-t>;</emu-t> <emu-t>.</emu-t> <emu-t>&lt;</emu-t> <emu-t>&gt;</emu-t> <emu-t>(</emu-t> <emu-t>)</emu-t> <emu-t>{</emu-t> <emu-t>}</emu-t> <emu-t>[</emu-t> <emu-t>]</emu-t> <emu-t>@</emu-t> <emu-t>...</emu-t> <emu-t>#</emu-t></emu-rhs>
2611</emu-production>
2612<emu-production name="WhiteSpace" id="prod-WhiteSpace">
2613 <emu-nt><a href="#prod-WhiteSpace">WhiteSpace</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="k4soaizl"><emu-gprose>&lt;TAB&gt;</emu-gprose></emu-rhs>
2614 <emu-rhs a="eznvjwhz"><emu-gprose>&lt;LF&gt;</emu-gprose></emu-rhs>
2615 <emu-rhs a="w_cit1lu"><emu-gprose>&lt;VT&gt;</emu-gprose></emu-rhs>
2616 <emu-rhs a="dvfflmsr"><emu-gprose>&lt;FF&gt;</emu-gprose></emu-rhs>
2617 <emu-rhs a="q1yr1eki"><emu-gprose>&lt;CR&gt;</emu-gprose></emu-rhs>
2618 <emu-rhs a="01dfufyk"><emu-gprose>&lt;SP&gt;</emu-gprose></emu-rhs>
2619 <emu-rhs a="_fwb4uzc"><emu-gprose>&lt;NEL&gt;</emu-gprose></emu-rhs>
2620 <emu-rhs a="rdfm2xfx"><emu-gprose>&lt;LRM&gt;</emu-gprose></emu-rhs>
2621 <emu-rhs a="t_zqlt0-"><emu-gprose>&lt;RLM&gt;</emu-gprose></emu-rhs>
2622 <emu-rhs a="eaiqsw9w"><emu-gprose>&lt;LS&gt;</emu-gprose></emu-rhs>
2623 <emu-rhs a="z8h10fxn"><emu-gprose>&lt;PS&gt;</emu-gprose></emu-rhs>
2624</emu-production>
2625<emu-production name="Comment" id="prod-Comment">
2626 <emu-nt><a href="#prod-Comment">Comment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sieyeref"><emu-nt id="_ref_55"><a href="#prod-MultiLineComment">MultiLineComment</a></emu-nt></emu-rhs>
2627 <emu-rhs a="sscrkqcd"><emu-nt id="_ref_56"><a href="#prod-SingleLineComment">SingleLineComment</a></emu-nt></emu-rhs>
2628</emu-production>
2629<emu-production name="MultiLineComment" id="prod-MultiLineComment">
2630 <emu-nt><a href="#prod-MultiLineComment">MultiLineComment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hhzm60cr">
2631 <emu-t>/*</emu-t>
2632 <emu-nt optional="" id="_ref_57"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2633 <emu-t>*/</emu-t>
2634 </emu-rhs>
2635</emu-production>
2636<emu-production name="MultiLineCommentChars" id="prod-MultiLineCommentChars">
2637 <emu-nt><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jkbv-8n6">
2638 <emu-nt id="_ref_58"><a href="#prod-MultiLineNotAsteriskChar">MultiLineNotAsteriskChar</a></emu-nt>
2639 <emu-nt optional="" id="_ref_59"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2640 </emu-rhs>
2641 <emu-rhs a="b8trwjej">
2642 <emu-t>*</emu-t>
2643 <emu-nt optional="" id="_ref_60"><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2644 </emu-rhs>
2645</emu-production>
2646<emu-production name="PostAsteriskCommentChars" id="prod-PostAsteriskCommentChars">
2647 <emu-nt><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jwfqbwpm">
2648 <emu-nt id="_ref_61"><a href="#prod-MultiLineNotForwardSlashOrAsteriskChar">MultiLineNotForwardSlashOrAsteriskChar</a></emu-nt>
2649 <emu-nt optional="" id="_ref_62"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2650 </emu-rhs>
2651 <emu-rhs a="b8trwjej">
2652 <emu-t>*</emu-t>
2653 <emu-nt optional="" id="_ref_63"><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2654 </emu-rhs>
2655</emu-production>
2656<emu-production name="MultiLineNotAsteriskChar" id="prod-MultiLineNotAsteriskChar">
2657 <emu-nt><a href="#prod-MultiLineNotAsteriskChar">MultiLineNotAsteriskChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lflef8ko"><emu-nt id="_ref_64"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-t>*</emu-t></emu-gmod></emu-rhs>
2658</emu-production>
2659<emu-production name="MultiLineNotForwardSlashOrAsteriskChar" id="prod-MultiLineNotForwardSlashOrAsteriskChar">
2660 <emu-nt><a href="#prod-MultiLineNotForwardSlashOrAsteriskChar">MultiLineNotForwardSlashOrAsteriskChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hdfnrv5z"><emu-nt id="_ref_65"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not one of <emu-t>/</emu-t> or <emu-t>*</emu-t></emu-gmod></emu-rhs>
2661</emu-production>
2662<emu-production name="SingleLineComment" id="prod-SingleLineComment">
2663 <emu-nt><a href="#prod-SingleLineComment">SingleLineComment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="u-3whel6">
2664 <emu-t>//</emu-t>
2665 <emu-nt optional="" id="_ref_66"><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2666 </emu-rhs>
2667</emu-production>
2668<emu-production name="SingleLineCommentChars" id="prod-SingleLineCommentChars">
2669 <emu-nt><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rshuryvh">
2670 <emu-nt id="_ref_67"><a href="#prod-SingleLineCommentChar">SingleLineCommentChar</a></emu-nt>
2671 <emu-nt optional="" id="_ref_68"><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2672 </emu-rhs>
2673</emu-production>
2674<emu-production name="SingleLineCommentChar" id="prod-SingleLineCommentChar">
2675 <emu-nt><a href="#prod-SingleLineCommentChar">SingleLineCommentChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lvvfp8iw"><emu-nt id="_ref_69"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt><a href="https://tc39.es/ecma262/#prod-LineTerminator">LineTerminator</a></emu-nt></emu-gmod></emu-rhs>
2676</emu-production>
2677</emu-grammar>
2678</emu-clause>
2679
2680<emu-clause id="syntactic-grammar">
2681<h1><span class="secnum">2</span> Syntactic Grammar</h1>
2682<emu-grammar type="definition"><emu-production name="CadlScriptItemList" id="prod-CadlScriptItemList">
2683 <emu-nt><a href="#prod-CadlScriptItemList">CadlScriptItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fihs1zye">
2684 <emu-nt optional="" id="_ref_70"><a href="#prod-CadlScriptItemList">CadlScriptItemList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2685 <emu-nt id="_ref_71"><a href="#prod-CadlScriptItem">CadlScriptItem</a></emu-nt>
2686 </emu-rhs>
2687</emu-production>
2688<emu-production name="CadlScriptItem" id="prod-CadlScriptItem">
2689 <emu-nt><a href="#prod-CadlScriptItem">CadlScriptItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sgwx93oj"><emu-nt id="_ref_72"><a href="#prod-BlocklessNamespaceStatement">BlocklessNamespaceStatement</a></emu-nt></emu-rhs>
2690 <emu-rhs a="zi_5hwi0"><emu-nt id="_ref_73"><a href="#prod-ImportStatement">ImportStatement</a></emu-nt></emu-rhs>
2691 <emu-rhs a="pyyivtxj"><emu-nt id="_ref_74"><a href="#prod-Statement">Statement</a></emu-nt></emu-rhs>
2692</emu-production>
2693<emu-production name="BlocklessNamespaceStatement" id="prod-BlocklessNamespaceStatement">
2694 <emu-nt><a href="#prod-BlocklessNamespaceStatement">BlocklessNamespaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="woshe1r5">
2695 <emu-nt optional="" id="_ref_75"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2696 <emu-t>namespace</emu-t>
2697 <emu-nt id="_ref_76"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
2698 <emu-t>;</emu-t>
2699 </emu-rhs>
2700</emu-production>
2701<emu-production name="ImportStatement" id="prod-ImportStatement">
2702 <emu-nt><a href="#prod-ImportStatement">ImportStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fhkncxvv">
2703 <emu-t>import</emu-t>
2704 <emu-nt id="_ref_77"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2705 <emu-t>;</emu-t>
2706 </emu-rhs>
2707</emu-production>
2708<emu-production name="StatementList" id="prod-StatementList">
2709 <emu-nt><a href="#prod-StatementList">StatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ssyorrl_">
2710 <emu-nt optional="" id="_ref_78"><a href="#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2711 <emu-nt id="_ref_79"><a href="#prod-Statement">Statement</a></emu-nt>
2712 </emu-rhs>
2713</emu-production>
2714<emu-production name="Statement" id="prod-Statement">
2715 <emu-nt><a href="#prod-Statement">Statement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ngbc4m7o"><emu-nt id="_ref_80"><a href="#prod-ModelStatement">ModelStatement</a></emu-nt></emu-rhs>
2716 <emu-rhs a="qhwhhau7"><emu-nt id="_ref_81"><a href="#prod-InterfaceStatement">InterfaceStatement</a></emu-nt></emu-rhs>
2717 <emu-rhs a="_ljtj5og"><emu-nt id="_ref_82"><a href="#prod-NamespaceStatement">NamespaceStatement</a></emu-nt></emu-rhs>
2718 <emu-rhs a="qlyu8ssa"><emu-nt id="_ref_83"><a href="#prod-OperationStatement">OperationStatement</a></emu-nt></emu-rhs>
2719 <emu-rhs a="rmuscggd"><emu-nt id="_ref_84"><a href="#prod-UsingStatement">UsingStatement</a></emu-nt></emu-rhs>
2720 <emu-rhs a="fwtcv5di"><emu-nt id="_ref_85"><a href="#prod-EnumStatement">EnumStatement</a></emu-nt></emu-rhs>
2721 <emu-rhs a="dzlcgyrg"><emu-nt id="_ref_86"><a href="#prod-AliasStatement">AliasStatement</a></emu-nt></emu-rhs>
2722 <emu-rhs a="sg2sawim"><emu-t>;</emu-t></emu-rhs>
2723</emu-production>
2724<emu-production name="UsingStatement" id="prod-UsingStatement">
2725 <emu-nt><a href="#prod-UsingStatement">UsingStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nfxtjnnc">
2726 <emu-t>using</emu-t>
2727 <emu-nt id="_ref_87"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
2728 <emu-t>;</emu-t>
2729 </emu-rhs>
2730</emu-production>
2731<emu-production name="ModelStatement" id="prod-ModelStatement">
2732 <emu-nt><a href="#prod-ModelStatement">ModelStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w3a1y-ib">
2733 <emu-nt optional="" id="_ref_88"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2734 <emu-t>model</emu-t>
2735 <emu-nt id="_ref_89"><a href="#prod-Identifier">Identifier</a></emu-nt>
2736 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2737 <emu-nt optional="" id="_ref_90"><a href="#prod-ModelHeritage">ModelHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2738 <emu-t>{</emu-t>
2739 <emu-nt optional="" id="_ref_91"><a href="#prod-ModelBody">ModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2740 <emu-t>}</emu-t>
2741 </emu-rhs>
2742</emu-production>
2743<emu-production name="ModelHeritage" id="prod-ModelHeritage">
2744 <emu-nt><a href="#prod-ModelHeritage">ModelHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="baknrbyl">
2745 <emu-t>extends</emu-t>
2746 <emu-nt id="_ref_92"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
2747 </emu-rhs>
2748 <emu-rhs a="jm_bzxxi">
2749 <emu-t>is</emu-t>
2750 <emu-nt id="_ref_93"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
2751 </emu-rhs>
2752</emu-production>
2753<emu-production name="ModelBody" id="prod-ModelBody">
2754 <emu-nt><a href="#prod-ModelBody">ModelBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nd7shwc0">
2755 <emu-nt id="_ref_94"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
2756 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2757 </emu-rhs>
2758 <emu-rhs a="-duy8rb1">
2759 <emu-nt id="_ref_95"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
2760 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2761 </emu-rhs>
2762</emu-production>
2763<emu-production name="ModelPropertyList" id="prod-ModelPropertyList">
2764 <emu-nt><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ghoz7lyz"><emu-nt id="_ref_96"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt></emu-rhs>
2765 <emu-rhs a="vf9tzeyl">
2766 <emu-nt id="_ref_97"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
2767 <emu-t>,</emu-t>
2768 <emu-nt id="_ref_98"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt>
2769 </emu-rhs>
2770 <emu-rhs a="lzgybwma">
2771 <emu-nt id="_ref_99"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
2772 <emu-t>;</emu-t>
2773 <emu-nt id="_ref_100"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt>
2774 </emu-rhs>
2775</emu-production>
2776<emu-production name="ModelProperty" id="prod-ModelProperty">
2777 <emu-nt><a href="#prod-ModelProperty">ModelProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gibki9cu"><emu-nt id="_ref_101"><a href="#prod-ModelSpreadProperty">ModelSpreadProperty</a></emu-nt></emu-rhs>
2778 <emu-rhs a="77nrmgnp">
2779 <emu-nt optional="" id="_ref_102"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2780 <emu-nt id="_ref_103"><a href="#prod-Identifier">Identifier</a></emu-nt>
2781 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2782 <emu-t>:</emu-t>
2783 <emu-nt id="_ref_104"><a href="#prod-Expression">Expression</a></emu-nt>
2784 </emu-rhs>
2785 <emu-rhs a="vmgvgt2o">
2786 <emu-nt optional="" id="_ref_105"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2787 <emu-nt id="_ref_106"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2788 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2789 <emu-t>:</emu-t>
2790 <emu-nt id="_ref_107"><a href="#prod-Expression">Expression</a></emu-nt>
2791 </emu-rhs>
2792</emu-production>
2793<emu-production name="ModelSpreadProperty" id="prod-ModelSpreadProperty">
2794 <emu-nt><a href="#prod-ModelSpreadProperty">ModelSpreadProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r9kkoml-">
2795 <emu-t>...</emu-t>
2796 <emu-nt id="_ref_108"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
2797 </emu-rhs>
2798</emu-production>
2799<emu-production name="InterfaceStatement" id="prod-InterfaceStatement">
2800 <emu-nt><a href="#prod-InterfaceStatement">InterfaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exjnkaev">
2801 <emu-t>interface</emu-t>
2802 <emu-nt id="_ref_109"><a href="#prod-Identifier">Identifier</a></emu-nt>
2803 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2804 <emu-nt optional="" id="_ref_110"><a href="#prod-InterfaceHeritage">InterfaceHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2805 <emu-t>{</emu-t>
2806 <emu-nt optional="">InterfaceBody<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2807 <emu-t>}</emu-t>
2808 </emu-rhs>
2809</emu-production>
2810<emu-production name="InterfaceHeritage" id="prod-InterfaceHeritage">
2811 <emu-nt><a href="#prod-InterfaceHeritage">InterfaceHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fy0l4eik">
2812 <emu-t>mixes</emu-t>
2813 <emu-nt id="_ref_111"><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt>
2814 </emu-rhs>
2815 <emu-rhs a="s2k4ex-k"><emu-nt>InterfaceBody</emu-nt></emu-rhs>
2816 <emu-rhs a="w_aa5rjr">
2817 <emu-nt id="_ref_112"><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt>
2818 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2819 </emu-rhs>
2820</emu-production>
2821<emu-production name="InterfaceMemberList" id="prod-InterfaceMemberList">
2822 <emu-nt><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xakzxkez"><emu-nt id="_ref_113"><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt></emu-rhs>
2823 <emu-rhs a="erjllshi">
2824 <emu-nt id="_ref_114"><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt>
2825 <emu-t>;</emu-t>
2826 <emu-nt id="_ref_115"><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt>
2827 </emu-rhs>
2828</emu-production>
2829<emu-production name="InterfaceMember" id="prod-InterfaceMember">
2830 <emu-nt><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i02ribbk">
2831 <emu-t optional="">op<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2832 <emu-nt id="_ref_116"><a href="#prod-Identifier">Identifier</a></emu-nt>
2833 <emu-t>(</emu-t>
2834 <emu-nt optional="" id="_ref_117"><a href="#prod-ModelPropertyList">ModelPropertyList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2835 <emu-t>)</emu-t>
2836 <emu-t>:</emu-t>
2837 <emu-nt id="_ref_118"><a href="#prod-Expression">Expression</a></emu-nt>
2838 </emu-rhs>
2839</emu-production>
2840<emu-production name="UnionStatement" id="prod-UnionStatement">
2841 <emu-nt><a href="#prod-UnionStatement">UnionStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jqsx6v8u">
2842 <emu-nt optional="" id="_ref_119"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2843 <emu-t>union</emu-t>
2844 <emu-nt id="_ref_120"><a href="#prod-Identifier">Identifier</a></emu-nt>
2845 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2846 <emu-t>{</emu-t>
2847 <emu-nt optional="" id="_ref_121"><a href="#prod-UnionBody">UnionBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2848 <emu-t>}</emu-t>
2849 </emu-rhs>
2850</emu-production>
2851<emu-production name="UnionBody" id="prod-UnionBody">
2852 <emu-nt><a href="#prod-UnionBody">UnionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lauvayzn">
2853 <emu-nt id="_ref_122"><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt>
2854 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2855 </emu-rhs>
2856</emu-production>
2857<emu-production name="UnionVariantList" id="prod-UnionVariantList">
2858 <emu-nt><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfhz-n9b"><emu-nt id="_ref_123"><a href="#prod-UnionVariant">UnionVariant</a></emu-nt></emu-rhs>
2859 <emu-rhs a="b_wjyurc">
2860 <emu-nt id="_ref_124"><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt>
2861 <emu-t>;</emu-t>
2862 <emu-nt id="_ref_125"><a href="#prod-UnionVariant">UnionVariant</a></emu-nt>
2863 </emu-rhs>
2864</emu-production>
2865<emu-production name="UnionVariant" id="prod-UnionVariant">
2866 <emu-nt><a href="#prod-UnionVariant">UnionVariant</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="h9gqpl1v">
2867 <emu-nt optional="" id="_ref_126"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2868 <emu-nt id="_ref_127"><a href="#prod-Identifier">Identifier</a></emu-nt>
2869 <emu-t>:</emu-t>
2870 <emu-nt id="_ref_128"><a href="#prod-Expression">Expression</a></emu-nt>
2871 </emu-rhs>
2872 <emu-rhs a="2mhcutnm">
2873 <emu-nt optional="" id="_ref_129"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2874 <emu-nt id="_ref_130"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2875 <emu-t>:</emu-t>
2876 <emu-nt id="_ref_131"><a href="#prod-Expression">Expression</a></emu-nt>
2877 </emu-rhs>
2878</emu-production>
2879<emu-production name="EnumStatement" id="prod-EnumStatement">
2880 <emu-nt><a href="#prod-EnumStatement">EnumStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i7ob7wbq">
2881 <emu-nt optional="" id="_ref_132"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2882 <emu-t>enum</emu-t>
2883 <emu-nt id="_ref_133"><a href="#prod-Identifier">Identifier</a></emu-nt>
2884 <emu-t>{</emu-t>
2885 <emu-nt optional="" id="_ref_134"><a href="#prod-EnumBody">EnumBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2886 <emu-t>}</emu-t>
2887 </emu-rhs>
2888</emu-production>
2889<emu-production name="EnumBody" id="prod-EnumBody">
2890 <emu-nt><a href="#prod-EnumBody">EnumBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ag--srfg">
2891 <emu-nt id="_ref_135"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
2892 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2893 </emu-rhs>
2894 <emu-rhs a="vfvqnt4z">
2895 <emu-nt id="_ref_136"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
2896 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
2897 </emu-rhs>
2898</emu-production>
2899<emu-production name="EnumMemberList" id="prod-EnumMemberList">
2900 <emu-nt><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vflanevg"><emu-nt id="_ref_137"><a href="#prod-EnumMember">EnumMember</a></emu-nt></emu-rhs>
2901 <emu-rhs a="7dn-cbj2">
2902 <emu-nt id="_ref_138"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
2903 <emu-t>,</emu-t>
2904 <emu-nt id="_ref_139"><a href="#prod-EnumMember">EnumMember</a></emu-nt>
2905 </emu-rhs>
2906 <emu-rhs a="qjf2au36">
2907 <emu-nt id="_ref_140"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
2908 <emu-t>;</emu-t>
2909 <emu-nt id="_ref_141"><a href="#prod-EnumMember">EnumMember</a></emu-nt>
2910 </emu-rhs>
2911</emu-production>
2912<emu-production name="EnumMember" id="prod-EnumMember">
2913 <emu-nt><a href="#prod-EnumMember">EnumMember</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="htyyapxs">
2914 <emu-nt optional="" id="_ref_142"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2915 <emu-nt id="_ref_143"><a href="#prod-Identifier">Identifier</a></emu-nt>
2916 <emu-nt optional="" id="_ref_144"><a href="#prod-EnumMemberValue">EnumMemberValue</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2917 </emu-rhs>
2918 <emu-rhs a="d-ggnl4a">
2919 <emu-nt optional="" id="_ref_145"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2920 <emu-nt id="_ref_146"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2921 <emu-nt optional="" id="_ref_147"><a href="#prod-EnumMemberValue">EnumMemberValue</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2922 </emu-rhs>
2923</emu-production>
2924<emu-production name="EnumMemberValue" id="prod-EnumMemberValue">
2925 <emu-nt><a href="#prod-EnumMemberValue">EnumMemberValue</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qbuxgevr">
2926 <emu-t>:</emu-t>
2927 <emu-nt id="_ref_148"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2928 </emu-rhs>
2929 <emu-rhs a="ib128nab">
2930 <emu-t>:</emu-t>
2931 <emu-nt id="_ref_149"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt>
2932 </emu-rhs>
2933</emu-production>
2934<emu-production name="AliasStatement" id="prod-AliasStatement">
2935 <emu-nt><a href="#prod-AliasStatement">AliasStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vcp2vkl0">
2936 <emu-t>alias</emu-t>
2937 <emu-nt id="_ref_150"><a href="#prod-Identifier">Identifier</a></emu-nt>
2938 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2939 <emu-t>=</emu-t>
2940 <emu-nt id="_ref_151"><a href="#prod-Expression">Expression</a></emu-nt>
2941 </emu-rhs>
2942 <emu-rhs a="n0rgsga2"><emu-nt>TemplateParameters</emu-nt></emu-rhs>
2943 <emu-rhs a="bedwy-8u">
2944 <emu-t>&lt;</emu-t>
2945 <emu-nt id="_ref_152"><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt>
2946 <emu-t>&gt;</emu-t>
2947 </emu-rhs>
2948</emu-production>
2949<emu-production name="TemplateParameterList" id="prod-TemplateParameterList">
2950 <emu-nt><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ejiqpl9p"><emu-nt id="_ref_153"><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt></emu-rhs>
2951 <emu-rhs a="sxsfhd-n">
2952 <emu-nt id="_ref_154"><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt>
2953 <emu-t>,</emu-t>
2954 <emu-nt id="_ref_155"><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt>
2955 </emu-rhs>
2956</emu-production>
2957<emu-production name="TemplateParameter" id="prod-TemplateParameter">
2958 <emu-nt><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pzfwtbdz">
2959 <emu-nt id="_ref_156"><a href="#prod-Identifier">Identifier</a></emu-nt>
2960 <emu-nt optional="" id="_ref_157"><a href="#prod-TemplateParameterDefault">TemplateParameterDefault</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2961 </emu-rhs>
2962</emu-production>
2963<emu-production name="TemplateParameterDefault" id="prod-TemplateParameterDefault">
2964 <emu-nt><a href="#prod-TemplateParameterDefault">TemplateParameterDefault</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a5ipakza">
2965 <emu-t>=</emu-t>
2966 <emu-nt id="_ref_158"><a href="#prod-Expression">Expression</a></emu-nt>
2967 </emu-rhs>
2968</emu-production>
2969<emu-production name="IdentifierList" id="prod-IdentifierList">
2970 <emu-nt><a href="#prod-IdentifierList">IdentifierList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_159"><a href="#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
2971 <emu-rhs a="btxjxlll">
2972 <emu-nt id="_ref_160"><a href="#prod-IdentifierList">IdentifierList</a></emu-nt>
2973 <emu-t>,</emu-t>
2974 <emu-nt id="_ref_161"><a href="#prod-Identifier">Identifier</a></emu-nt>
2975 </emu-rhs>
2976</emu-production>
2977<emu-production name="NamespaceStatement" id="prod-NamespaceStatement">
2978 <emu-nt><a href="#prod-NamespaceStatement">NamespaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lrsdvje0">
2979 <emu-nt optional="" id="_ref_162"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2980 <emu-t>namespace</emu-t>
2981 <emu-nt id="_ref_163"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
2982 <emu-t>{</emu-t>
2983 <emu-nt optional="" id="_ref_164"><a href="#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2984 <emu-t>}</emu-t>
2985 </emu-rhs>
2986</emu-production>
2987<emu-production name="OperationStatement" id="prod-OperationStatement">
2988 <emu-nt><a href="#prod-OperationStatement">OperationStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fic4qgph">
2989 <emu-nt optional="" id="_ref_165"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2990 <emu-t>op</emu-t>
2991 <emu-nt id="_ref_166"><a href="#prod-Identifier">Identifier</a></emu-nt>
2992 <emu-t>(</emu-t>
2993 <emu-nt optional="" id="_ref_167"><a href="#prod-ModelPropertyList">ModelPropertyList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2994 <emu-t>)</emu-t>
2995 <emu-t>:</emu-t>
2996 <emu-nt id="_ref_168"><a href="#prod-Expression">Expression</a></emu-nt>
2997 <emu-t>;</emu-t>
2998 </emu-rhs>
2999</emu-production>
3000<emu-production name="Expression" id="prod-Expression">
3001 <emu-nt><a href="#prod-Expression">Expression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="otzlm2nv"><emu-nt id="_ref_169"><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt></emu-rhs>
3002</emu-production>
3003<emu-production name="UnionExpressionOrHigher" id="prod-UnionExpressionOrHigher">
3004 <emu-nt><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="l4bpz882"><emu-nt id="_ref_170"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt></emu-rhs>
3005 <emu-rhs a="oiwllrbb">
3006 <emu-t optional="">|<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3007 <emu-nt id="_ref_171"><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt>
3008 <emu-t>|</emu-t>
3009 <emu-nt id="_ref_172"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt>
3010 </emu-rhs>
3011</emu-production>
3012<emu-production name="IntersectionExpressionOrHigher" id="prod-IntersectionExpressionOrHigher">
3013 <emu-nt><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fxst_igc"><emu-nt id="_ref_173"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt></emu-rhs>
3014 <emu-rhs a="cgkcj8yb">
3015 <emu-t optional="">&amp;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3016 <emu-nt id="_ref_174"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt>
3017 <emu-t>&amp;</emu-t>
3018 <emu-nt id="_ref_175"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt>
3019 </emu-rhs>
3020</emu-production>
3021<emu-production name="ArrayExpressionOrHigher" id="prod-ArrayExpressionOrHigher">
3022 <emu-nt><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jvcvemtw"><emu-nt id="_ref_176"><a href="#prod-PrimaryExpression">PrimaryExpression</a></emu-nt></emu-rhs>
3023 <emu-rhs a="8k-eixnj">
3024 <emu-nt id="_ref_177"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt>
3025 <emu-t>[</emu-t>
3026 <emu-t>]</emu-t>
3027 </emu-rhs>
3028</emu-production>
3029<emu-production name="PrimaryExpression" id="prod-PrimaryExpression">
3030 <emu-nt><a href="#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kul-a19e"><emu-nt id="_ref_178"><a href="#prod-Literal">Literal</a></emu-nt></emu-rhs>
3031 <emu-rhs a="mpejatd_"><emu-nt id="_ref_179"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt></emu-rhs>
3032 <emu-rhs a="k5j7cutc"><emu-nt id="_ref_180"><a href="#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt></emu-rhs>
3033 <emu-rhs a="d007fnkw"><emu-nt id="_ref_181"><a href="#prod-ModelExpression">ModelExpression</a></emu-nt></emu-rhs>
3034 <emu-rhs a="rmcinm4a"><emu-nt id="_ref_182"><a href="#prod-TupleExpression">TupleExpression</a></emu-nt></emu-rhs>
3035</emu-production>
3036<emu-production name="Literal" id="prod-Literal">
3037 <emu-nt><a href="#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00"><emu-nt id="_ref_183"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
3038 <emu-rhs a="nqjh_sxl"><emu-nt id="_ref_184"><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt></emu-rhs>
3039 <emu-rhs a="pui0b1rt"><emu-nt id="_ref_185"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt></emu-rhs>
3040</emu-production>
3041<emu-production name="ReferenceExpression" id="prod-ReferenceExpression">
3042 <emu-nt><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mzr2yu9j">
3043 <emu-nt id="_ref_186"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3044 <emu-nt optional="" id="_ref_187"><a href="#prod-TemplateArguments">TemplateArguments</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3045 </emu-rhs>
3046</emu-production>
3047<emu-production name="ReferenceExpressionList" id="prod-ReferenceExpressionList">
3048 <emu-nt><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mpejatd_"><emu-nt id="_ref_188"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt></emu-rhs>
3049 <emu-rhs a="ry70nwgl">
3050 <emu-nt id="_ref_189"><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt>
3051 <emu-t>,</emu-t>
3052 <emu-nt id="_ref_190"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3053 </emu-rhs>
3054</emu-production>
3055<emu-production name="IdentifierOrMemberExpression" id="prod-IdentifierOrMemberExpression">
3056 <emu-nt><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_"><emu-nt id="_ref_191"><a href="#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
3057 <emu-rhs a="fagplbkz">
3058 <emu-nt id="_ref_192"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3059 <emu-t>.</emu-t>
3060 <emu-nt id="_ref_193"><a href="#prod-Identifier">Identifier</a></emu-nt>
3061 </emu-rhs>
3062</emu-production>
3063<emu-production name="TemplateArguments" id="prod-TemplateArguments">
3064 <emu-nt><a href="#prod-TemplateArguments">TemplateArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="erulm7dq">
3065 <emu-t>&lt;</emu-t>
3066 <emu-nt id="_ref_194"><a href="#prod-ExpressionList">ExpressionList</a></emu-nt>
3067 <emu-t>&gt;</emu-t>
3068 </emu-rhs>
3069</emu-production>
3070<emu-production name="ProjectionArguments" id="prod-ProjectionArguments">
3071 <emu-nt><a href="#prod-ProjectionArguments">ProjectionArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gq6jlu5e">
3072 <emu-t>(</emu-t>
3073 <emu-nt optional="" id="_ref_195"><a href="#prod-ExpressionList">ExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3074 <emu-t>)</emu-t>
3075 </emu-rhs>
3076</emu-production>
3077<emu-production name="ParenthesizedExpression" id="prod-ParenthesizedExpression">
3078 <emu-nt><a href="#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s6bvnd5v">
3079 <emu-t>(</emu-t>
3080 <emu-nt id="_ref_196"><a href="#prod-Expression">Expression</a></emu-nt>
3081 <emu-t>)</emu-t>
3082 </emu-rhs>
3083</emu-production>
3084<emu-production name="ModelExpression" id="prod-ModelExpression">
3085 <emu-nt><a href="#prod-ModelExpression">ModelExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="p9stvizw">
3086 <emu-t>{</emu-t>
3087 <emu-nt optional="" id="_ref_197"><a href="#prod-ModelBody">ModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3088 <emu-t>}</emu-t>
3089 </emu-rhs>
3090</emu-production>
3091<emu-production name="TupleExpression" id="prod-TupleExpression">
3092 <emu-nt><a href="#prod-TupleExpression">TupleExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mct6eje8">
3093 <emu-t>[</emu-t>
3094 <emu-nt id="_ref_198"><a href="#prod-ExpressionList">ExpressionList</a></emu-nt>
3095 <emu-t>]</emu-t>
3096 </emu-rhs>
3097</emu-production>
3098<emu-production name="ExpressionList" id="prod-ExpressionList">
3099 <emu-nt><a href="#prod-ExpressionList">ExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="l7avubnp"><emu-nt id="_ref_199"><a href="#prod-Expression">Expression</a></emu-nt></emu-rhs>
3100 <emu-rhs a="8cbmyyhk">
3101 <emu-nt id="_ref_200"><a href="#prod-ExpressionList">ExpressionList</a></emu-nt>
3102 <emu-t>,</emu-t>
3103 <emu-nt id="_ref_201"><a href="#prod-Expression">Expression</a></emu-nt>
3104 </emu-rhs>
3105</emu-production>
3106<emu-production name="DecoratorList" id="prod-DecoratorList">
3107 <emu-nt><a href="#prod-DecoratorList">DecoratorList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a6fvhq_2">
3108 <emu-nt optional="" id="_ref_202"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3109 <emu-nt id="_ref_203"><a href="#prod-Decorator">Decorator</a></emu-nt>
3110 </emu-rhs>
3111</emu-production>
3112<emu-production name="Decorator" id="prod-Decorator">
3113 <emu-nt><a href="#prod-Decorator">Decorator</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="p1dbtqtg">
3114 <emu-t>@</emu-t>
3115 <emu-nt id="_ref_204"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3116 <emu-nt optional="" id="_ref_205"><a href="#prod-DecoratorArguments">DecoratorArguments</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3117 </emu-rhs>
3118</emu-production>
3119<emu-production name="DecoratorArguments" id="prod-DecoratorArguments">
3120 <emu-nt><a href="#prod-DecoratorArguments">DecoratorArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gq6jlu5e">
3121 <emu-t>(</emu-t>
3122 <emu-nt optional="" id="_ref_206"><a href="#prod-ExpressionList">ExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3123 <emu-t>)</emu-t>
3124 </emu-rhs>
3125</emu-production>
3126<emu-production name="ProjectionStatement" id="prod-ProjectionStatement">
3127 <emu-nt><a href="#prod-ProjectionStatement">ProjectionStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_13j6y1k">
3128 <emu-t>projection</emu-t>
3129 <emu-nt id="_ref_207"><a href="#prod-ProjectionSelector">ProjectionSelector</a></emu-nt>
3130 <emu-nt id="_ref_208"><a href="#prod-ProjectionDirection">ProjectionDirection</a></emu-nt>
3131 <emu-nt id="_ref_209"><a href="#prod-ProjectionTag">ProjectionTag</a></emu-nt>
3132 <emu-nt optional="" id="_ref_210"><a href="#prod-ProjectionParameters">ProjectionParameters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3133 <emu-t>{</emu-t>
3134 <emu-nt id="_ref_211"><a href="#prod-ProjectionBody">ProjectionBody</a></emu-nt>
3135 <emu-t>}</emu-t>
3136 </emu-rhs>
3137</emu-production>
3138<emu-production name="ProjectionSelector" id="prod-ProjectionSelector">
3139 <emu-nt><a href="#prod-ProjectionSelector">ProjectionSelector</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-mdwbm0b"><emu-t>model</emu-t></emu-rhs>
3140 <emu-rhs a="71rsbeuh"><emu-t>interface</emu-t></emu-rhs>
3141 <emu-rhs a="ytodrzn0"><emu-t>op</emu-t></emu-rhs>
3142 <emu-rhs a="hgzzvb8j"><emu-t>union</emu-t></emu-rhs>
3143 <emu-rhs a="mpejatd_"><emu-nt id="_ref_212"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt></emu-rhs>
3144</emu-production>
3145<emu-production name="ProjectionDirection" id="prod-ProjectionDirection">
3146 <emu-nt><a href="#prod-ProjectionDirection">ProjectionDirection</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cys308sz"><emu-t>to</emu-t></emu-rhs>
3147 <emu-rhs a="gbwtlciv"><emu-t>from</emu-t></emu-rhs>
3148</emu-production>
3149<emu-production name="ProjectionTag" id="prod-ProjectionTag">
3150 <emu-nt><a href="#prod-ProjectionTag">ProjectionTag</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pkshwqzc">
3151 <emu-t>#</emu-t>
3152 <emu-nt id="_ref_213"><a href="#prod-Identifier">Identifier</a></emu-nt>
3153 </emu-rhs>
3154</emu-production>
3155<emu-production name="ProjectionParameters" id="prod-ProjectionParameters">
3156 <emu-nt><a href="#prod-ProjectionParameters">ProjectionParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yyjrc85a">
3157 <emu-t>(</emu-t>
3158 <emu-nt optional="" id="_ref_214"><a href="#prod-IdentifierList">IdentifierList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3159 <emu-t>)</emu-t>
3160 </emu-rhs>
3161</emu-production>
3162<emu-production name="ProjectionBody" id="prod-ProjectionBody">
3163 <emu-nt><a href="#prod-ProjectionBody">ProjectionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxmgst2s"><emu-nt id="_ref_215"><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt></emu-rhs>
3164</emu-production>
3165<emu-production name="ProjectionStatementList" id="prod-ProjectionStatementList">
3166 <emu-nt><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8jls0kgx"><emu-nt id="_ref_216"><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt></emu-rhs>
3167 <emu-rhs a="123mhtoq">
3168 <emu-nt id="_ref_217"><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt>
3169 <emu-t>;</emu-t>
3170 <emu-nt id="_ref_218"><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt>
3171 </emu-rhs>
3172</emu-production>
3173<emu-production name="ProjectionStatementItem" id="prod-ProjectionStatementItem">
3174 <emu-nt><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ygil0lya"><emu-nt>ProjectionExpressionStatement</emu-nt></emu-rhs>
3175</emu-production>
3176<emu-production name="ProjectionExpression" id="prod-ProjectionExpression">
3177 <emu-nt><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vzsiuzn4"><emu-nt id="_ref_219"><a href="#prod-ProjectionReturnExpression">ProjectionReturnExpression</a></emu-nt></emu-rhs>
3178</emu-production>
3179<emu-production name="ProjectionReturnExpression" id="prod-ProjectionReturnExpression">
3180 <emu-nt><a href="#prod-ProjectionReturnExpression">ProjectionReturnExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="24gnoobj"><emu-nt id="_ref_220"><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt></emu-rhs>
3181 <emu-rhs a="mxa7it1a">
3182 <emu-t>return</emu-t>
3183 <emu-nt id="_ref_221"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3184 </emu-rhs>
3185</emu-production>
3186<emu-production name="ProjectionLogicalOrExpression" id="prod-ProjectionLogicalOrExpression">
3187 <emu-nt><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aawamjyo"><emu-nt id="_ref_222"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt></emu-rhs>
3188 <emu-rhs a="k589waww">
3189 <emu-nt id="_ref_223"><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt>
3190 <emu-t>||</emu-t>
3191 <emu-nt id="_ref_224"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt>
3192 </emu-rhs>
3193</emu-production>
3194<emu-production name="ProjectionLogicalAndExpression" id="prod-ProjectionLogicalAndExpression">
3195 <emu-nt><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nttyzhj4"><emu-nt id="_ref_225"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt></emu-rhs>
3196 <emu-rhs a="evmo1uol">
3197 <emu-nt id="_ref_226"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt>
3198 <emu-t>&amp;&amp;</emu-t>
3199 <emu-nt id="_ref_227"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3200 </emu-rhs>
3201</emu-production>
3202<emu-production name="ProjectionEqualityExpression" id="prod-ProjectionEqualityExpression">
3203 <emu-nt><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nttyzhj4"><emu-nt id="_ref_228"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt></emu-rhs>
3204 <emu-rhs a="lackn1tw">
3205 <emu-nt id="_ref_229"><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt>
3206 <emu-t>==</emu-t>
3207 <emu-nt id="_ref_230"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3208 </emu-rhs>
3209 <emu-rhs a="mlrnlbcv">
3210 <emu-nt id="_ref_231"><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt>
3211 <emu-t>!=</emu-t>
3212 <emu-nt id="_ref_232"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3213 </emu-rhs>
3214</emu-production>
3215<emu-production name="ProjectionRelationalExpression" id="prod-ProjectionRelationalExpression">
3216 <emu-nt><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="flky6l5a"><emu-nt id="_ref_233"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt></emu-rhs>
3217 <emu-rhs a="7lkhh7co">
3218 <emu-nt id="_ref_234"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3219 <emu-t>&lt;</emu-t>
3220 <emu-nt id="_ref_235"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3221 </emu-rhs>
3222 <emu-rhs a="jwbqdqyk">
3223 <emu-nt id="_ref_236"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3224 <emu-t>&gt;</emu-t>
3225 <emu-nt id="_ref_237"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3226 </emu-rhs>
3227 <emu-rhs a="rg5xsl8u">
3228 <emu-nt id="_ref_238"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3229 <emu-t>&lt;=</emu-t>
3230 <emu-nt id="_ref_239"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3231 </emu-rhs>
3232 <emu-rhs a="y-qu2tqb">
3233 <emu-nt id="_ref_240"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3234 <emu-t>&gt;=</emu-t>
3235 <emu-nt id="_ref_241"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3236 </emu-rhs>
3237</emu-production>
3238<emu-production name="ProjectionAdditiveExpression" id="prod-ProjectionAdditiveExpression">
3239 <emu-nt><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eked4n7k"><emu-nt id="_ref_242"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt></emu-rhs>
3240 <emu-rhs a="iiox3k7e">
3241 <emu-nt id="_ref_243"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3242 <emu-t>+</emu-t>
3243 <emu-nt id="_ref_244"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3244 </emu-rhs>
3245 <emu-rhs a="xy3v8nqo">
3246 <emu-nt id="_ref_245"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3247 <emu-t>-</emu-t>
3248 <emu-nt id="_ref_246"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3249 </emu-rhs>
3250</emu-production>
3251<emu-production name="ProjectionMultiplicativeExpression" id="prod-ProjectionMultiplicativeExpression">
3252 <emu-nt><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eosbpz0i"><emu-nt id="_ref_247"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt></emu-rhs>
3253 <emu-rhs a="oklvxhw2">
3254 <emu-nt id="_ref_248"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3255 <emu-t>*</emu-t>
3256 <emu-nt id="_ref_249"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3257 </emu-rhs>
3258 <emu-rhs a="vmdvvwy0">
3259 <emu-nt id="_ref_250"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3260 <emu-t>/</emu-t>
3261 <emu-nt id="_ref_251"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3262 </emu-rhs>
3263</emu-production>
3264<emu-production name="ProjectionUnaryExpression" id="prod-ProjectionUnaryExpression">
3265 <emu-nt><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="y0pnlb1i"><emu-nt id="_ref_252"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt></emu-rhs>
3266 <emu-rhs a="xbyln6wd">
3267 <emu-t>!</emu-t>
3268 <emu-nt id="_ref_253"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3269 </emu-rhs>
3270</emu-production>
3271<emu-production name="ProjectionCallExpression" id="prod-ProjectionCallExpression">
3272 <emu-nt><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bovlf96p"><emu-nt id="_ref_254"><a href="#prod-ProjectionDecoratorReferenceExpression">ProjectionDecoratorReferenceExpression</a></emu-nt></emu-rhs>
3273 <emu-rhs a="dskpubvk">
3274 <emu-nt id="_ref_255"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3275 <emu-nt id="_ref_256"><a href="#prod-ProjectionCallArguments">ProjectionCallArguments</a></emu-nt>
3276 </emu-rhs>
3277 <emu-rhs a="mlqh18ki">
3278 <emu-nt id="_ref_257"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3279 <emu-t>.</emu-t>
3280 <emu-nt id="_ref_258"><a href="#prod-Identifier">Identifier</a></emu-nt>
3281 </emu-rhs>
3282 <emu-rhs a="o5cqmytw">
3283 <emu-nt id="_ref_259"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3284 <emu-t>::</emu-t>
3285 <emu-nt id="_ref_260"><a href="#prod-Identifier">Identifier</a></emu-nt>
3286 </emu-rhs>
3287</emu-production>
3288<emu-production name="ProjectionCallArguments" id="prod-ProjectionCallArguments">
3289 <emu-nt><a href="#prod-ProjectionCallArguments">ProjectionCallArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j4chh_gn">
3290 <emu-t>(</emu-t>
3291 <emu-nt optional="" id="_ref_261"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3292 <emu-t>)</emu-t>
3293 </emu-rhs>
3294</emu-production>
3295<emu-production name="ProjectionDecoratorReferenceExpression" id="prod-ProjectionDecoratorReferenceExpression">
3296 <emu-nt><a href="#prod-ProjectionDecoratorReferenceExpression">ProjectionDecoratorReferenceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="upl3vrmk"><emu-nt id="_ref_262"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt></emu-rhs>
3297 <emu-rhs a="ifcyd-aq">
3298 <emu-t>@</emu-t>
3299 <emu-nt id="_ref_263"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3300 </emu-rhs>
3301</emu-production>
3302<emu-production name="ProjectionMemberExpression" id="prod-ProjectionMemberExpression">
3303 <emu-nt><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0yuqksdg"><emu-nt id="_ref_264"><a href="#prod-ProjectionPrimaryExpression">ProjectionPrimaryExpression</a></emu-nt></emu-rhs>
3304 <emu-rhs a="jew6aiq_">
3305 <emu-nt id="_ref_265"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt>
3306 <emu-t>.</emu-t>
3307 <emu-nt id="_ref_266"><a href="#prod-Identifier">Identifier</a></emu-nt>
3308 </emu-rhs>
3309 <emu-rhs a="rdfgqhl2">
3310 <emu-nt id="_ref_267"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt>
3311 <emu-t>::</emu-t>
3312 <emu-nt id="_ref_268"><a href="#prod-Identifier">Identifier</a></emu-nt>
3313 </emu-rhs>
3314</emu-production>
3315<emu-production name="ProjectionPrimaryExpression" id="prod-ProjectionPrimaryExpression">
3316 <emu-nt><a href="#prod-ProjectionPrimaryExpression">ProjectionPrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gb-biqvs"><emu-t>self</emu-t></emu-rhs>
3317 <emu-rhs a="bras6mo_"><emu-nt id="_ref_269"><a href="#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
3318 <emu-rhs a="cjpglqhg"><emu-nt id="_ref_270"><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt></emu-rhs>
3319 <emu-rhs a="kwuqjwk9"><emu-nt id="_ref_271"><a href="#prod-ProjectionLambdaExpression">ProjectionLambdaExpression</a></emu-nt></emu-rhs>
3320 <emu-rhs a="kul-a19e"><emu-nt id="_ref_272"><a href="#prod-Literal">Literal</a></emu-nt></emu-rhs>
3321 <emu-rhs a="pmeanrkf"><emu-nt id="_ref_273"><a href="#prod-ProjectionModelExpression">ProjectionModelExpression</a></emu-nt></emu-rhs>
3322 <emu-rhs a="0ehfrlsm"><emu-nt id="_ref_274"><a href="#prod-ProjectionTupleExpression">ProjectionTupleExpression</a></emu-nt></emu-rhs>
3323 <emu-rhs a="ult0-wp7"><emu-nt id="_ref_275"><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt></emu-rhs>
3324</emu-production>
3325<emu-production name="CoverProjectionParenthesizedExpressionAndLambdaParameterList" id="prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">
3326 <emu-nt><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="b22wugnz">
3327 <emu-t>(</emu-t>
3328 <emu-nt id="_ref_276"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3329 <emu-t>)</emu-t>
3330 </emu-rhs>
3331</emu-production>
3332<emu-production name="ProjectionExpressionList" id="prod-ProjectionExpressionList">
3333 <emu-nt><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="emksbnr7"><emu-nt id="_ref_277"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt></emu-rhs>
3334 <emu-rhs a="if8za0tg">
3335 <emu-nt id="_ref_278"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3336 <emu-t>,</emu-t>
3337 <emu-nt id="_ref_279"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3338 </emu-rhs>
3339</emu-production>
3340<emu-production name="ProjectionIfExpression" id="prod-ProjectionIfExpression">
3341 <emu-nt><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4wt0s7kz">
3342 <emu-t>if</emu-t>
3343 <emu-nt id="_ref_280"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3344 <emu-nt>BlockExpression</emu-nt>
3345 </emu-rhs>
3346 <emu-rhs a="uh-blucs">
3347 <emu-t>if</emu-t>
3348 <emu-nt id="_ref_281"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3349 <emu-nt>BlockExpression</emu-nt>
3350 <emu-t>else</emu-t>
3351 <emu-nt id="_ref_282"><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt>
3352 </emu-rhs>
3353 <emu-rhs a="o_gymffi">
3354 <emu-t>if</emu-t>
3355 <emu-nt id="_ref_283"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3356 <emu-nt>BlockExpression</emu-nt>
3357 <emu-t>else</emu-t>
3358 <emu-nt id="_ref_284"><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt>
3359 </emu-rhs>
3360</emu-production>
3361<emu-production name="ProjectionModelExpression" id="prod-ProjectionModelExpression">
3362 <emu-nt><a href="#prod-ProjectionModelExpression">ProjectionModelExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uni6ofws">
3363 <emu-t>{</emu-t>
3364 <emu-nt optional="" id="_ref_285"><a href="#prod-ProjectionModelBody">ProjectionModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3365 <emu-t>}</emu-t>
3366 </emu-rhs>
3367</emu-production>
3368<emu-production name="ProjectionModelBody" id="prod-ProjectionModelBody">
3369 <emu-nt><a href="#prod-ProjectionModelBody">ProjectionModelBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rtfwbkzz">
3370 <emu-nt id="_ref_286"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3371 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3372 </emu-rhs>
3373 <emu-rhs a="foktbtgh">
3374 <emu-nt id="_ref_287"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3375 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3376 </emu-rhs>
3377</emu-production>
3378<emu-production name="ProjectionModelPropertyList" id="prod-ProjectionModelPropertyList">
3379 <emu-nt><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qnv19o8r"><emu-nt id="_ref_288"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt></emu-rhs>
3380 <emu-rhs a="k06km7_w">
3381 <emu-nt id="_ref_289"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3382 <emu-t>,</emu-t>
3383 <emu-nt id="_ref_290"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt>
3384 </emu-rhs>
3385 <emu-rhs a="xtycdbqj">
3386 <emu-nt id="_ref_291"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3387 <emu-t>;</emu-t>
3388 <emu-nt id="_ref_292"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt>
3389 </emu-rhs>
3390</emu-production>
3391<emu-production name="ProjectionModelProperty" id="prod-ProjectionModelProperty">
3392 <emu-nt><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="noc7fhyz"><emu-nt id="_ref_293"><a href="#prod-ProjectionModelSpreadProperty">ProjectionModelSpreadProperty</a></emu-nt></emu-rhs>
3393 <emu-rhs a="6zpn0h3k">
3394 <emu-nt optional="" id="_ref_294"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3395 <emu-nt id="_ref_295"><a href="#prod-Identifier">Identifier</a></emu-nt>
3396 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3397 <emu-t>:</emu-t>
3398 <emu-nt id="_ref_296"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3399 </emu-rhs>
3400 <emu-rhs a="oncm7e4f">
3401 <emu-nt optional="" id="_ref_297"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3402 <emu-nt id="_ref_298"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3403 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3404 <emu-t>:</emu-t>
3405 <emu-nt id="_ref_299"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3406 </emu-rhs>
3407</emu-production>
3408<emu-production name="ProjectionModelSpreadProperty" id="prod-ProjectionModelSpreadProperty">
3409 <emu-nt><a href="#prod-ProjectionModelSpreadProperty">ProjectionModelSpreadProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="npvsjwgu">
3410 <emu-t>...</emu-t>
3411 <emu-nt id="_ref_300"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3412 </emu-rhs>
3413</emu-production>
3414<emu-production name="ProjectionTupleExpression" id="prod-ProjectionTupleExpression">
3415 <emu-nt><a href="#prod-ProjectionTupleExpression">ProjectionTupleExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gzasqabt">
3416 <emu-t>[</emu-t>
3417 <emu-nt id="_ref_301"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3418 <emu-t>]</emu-t>
3419 </emu-rhs>
3420</emu-production>
3421<emu-production name="ProjectionLambdaExpression" id="prod-ProjectionLambdaExpression">
3422 <emu-nt><a href="#prod-ProjectionLambdaExpression">ProjectionLambdaExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wjv4b-0b">
3423 <emu-nt id="_ref_302"><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt>
3424 <emu-t>=&gt;</emu-t>
3425 <emu-nt id="_ref_303"><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt>
3426 </emu-rhs>
3427</emu-production>
3428<emu-production name="ProjectionBlockExpression" id="prod-ProjectionBlockExpression">
3429 <emu-nt><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qsr0aizg">
3430 <emu-t>{</emu-t>
3431 <emu-nt id="_ref_304"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3432 <emu-t>}</emu-t>
3433 </emu-rhs>
3434</emu-production>
3435<emu-production name="LambdaParameters" id="prod-LambdaParameters">
3436 <emu-nt><a href="#prod-LambdaParameters">LambdaParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yyjrc85a">
3437 <emu-t>(</emu-t>
3438 <emu-nt optional="" id="_ref_305"><a href="#prod-IdentifierList">IdentifierList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3439 <emu-t>)</emu-t>
3440 </emu-rhs>
3441</emu-production>
3442</emu-grammar>
3443</emu-clause>
3444</div></body>