microsoft/typespec

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
e07d86c87a444d4145b98d85fa416eca819e251c

Branches

Tags

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

Clone

HTTPS

Download ZIP

docs/spec.html

3856lines · 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 => ({ key: getKey(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 this.$pinLink.textContent = menu._pinnedIds[this.entry.id] ? 'Unpin' : 'Pin';
902 });
903
904 this.$refsLink = document.createElement('a');
905 this.$refsLink.setAttribute('href', '#');
906 this.$refsLink.addEventListener('click', e => {
907 e.preventDefault();
908 e.stopPropagation();
909 referencePane.showReferencesFor(this.entry);
910 });
911 this.$container.appendChild(this.$permalink);
912 this.$container.appendChild(this.$pinLink);
913 this.$container.appendChild(this.$refsLink);
914 document.body.appendChild(this.$outer);
915 },
916
917 activate(el, entry, target) {
918 if (el === this._activeEl) return;
919 sdoBox.deactivate();
920 this.active = true;
921 this.entry = entry;
922 this.$pinLink.textContent = menu._pinnedIds[entry.id] ? 'Unpin' : 'Pin';
923 this.$outer.classList.add('active');
924 this.top = el.offsetTop - this.$outer.offsetHeight;
925 this.left = el.offsetLeft - 10;
926 this.$outer.setAttribute('style', 'left: ' + this.left + 'px; top: ' + this.top + 'px');
927 this.updatePermalink();
928 this.updateReferences();
929 this._activeEl = el;
930 if (this.top < document.body.scrollTop && el === target) {
931 // don't scroll unless it's a small thing (< 200px)
932 this.$outer.scrollIntoView();
933 }
934 },
935
936 updatePermalink() {
937 this.$permalink.setAttribute('href', makeLinkToId(this.entry.id));
938 },
939
940 updateReferences() {
941 this.$refsLink.textContent = `References (${(this.entry.referencingIds || []).length})`;
942 },
943
944 activateIfMouseOver(e) {
945 let ref = this.findReferenceUnder(e.target);
946 if (ref && (!this.active || e.pageY > this._activeEl.offsetTop)) {
947 let entry = menu.search.biblio.byId[ref.id];
948 this.activate(ref.element, entry, e.target);
949 } else if (
950 this.active &&
951 (e.pageY < this.top || e.pageY > this._activeEl.offsetTop + this._activeEl.offsetHeight)
952 ) {
953 this.deactivate();
954 }
955 },
956
957 findReferenceUnder(el) {
958 while (el) {
959 let parent = el.parentNode;
960 if (el.nodeName === 'EMU-RHS' || el.nodeName === 'EMU-PRODUCTION') {
961 return null;
962 }
963 if (
964 el.nodeName === 'H1' &&
965 parent.nodeName.match(/EMU-CLAUSE|EMU-ANNEX|EMU-INTRO/) &&
966 parent.id
967 ) {
968 return { element: el, id: parent.id };
969 } else if (el.nodeName === 'EMU-NT') {
970 if (
971 parent.nodeName === 'EMU-PRODUCTION' &&
972 parent.id &&
973 parent.id[0] !== '_' &&
974 parent.firstElementChild === el
975 ) {
976 // return the LHS non-terminal element
977 return { element: el, id: parent.id };
978 }
979 return null;
980 } else if (
981 el.nodeName.match(/EMU-(?!CLAUSE|XREF|ANNEX|INTRO)|DFN/) &&
982 el.id &&
983 el.id[0] !== '_'
984 ) {
985 if (
986 el.nodeName === 'EMU-FIGURE' ||
987 el.nodeName === 'EMU-TABLE' ||
988 el.nodeName === 'EMU-EXAMPLE'
989 ) {
990 // return the figcaption element
991 return { element: el.children[0].children[0], id: el.id };
992 } else {
993 return { element: el, id: el.id };
994 }
995 }
996 el = parent;
997 }
998 },
999
1000 deactivate() {
1001 this.$outer.classList.remove('active');
1002 this._activeEl = null;
1003 this.active = false;
1004 },
1005};
1006
1007function sortByClauseNumber(clause1, clause2) {
1008 let c1c = clause1.number.split('.');
1009 let c2c = clause2.number.split('.');
1010
1011 for (let i = 0; i < c1c.length; i++) {
1012 if (i >= c2c.length) {
1013 return 1;
1014 }
1015
1016 let c1 = c1c[i];
1017 let c2 = c2c[i];
1018 let c1cn = Number(c1);
1019 let c2cn = Number(c2);
1020
1021 if (Number.isNaN(c1cn) && Number.isNaN(c2cn)) {
1022 if (c1 > c2) {
1023 return 1;
1024 } else if (c1 < c2) {
1025 return -1;
1026 }
1027 } else if (!Number.isNaN(c1cn) && Number.isNaN(c2cn)) {
1028 return -1;
1029 } else if (Number.isNaN(c1cn) && !Number.isNaN(c2cn)) {
1030 return 1;
1031 } else if (c1cn > c2cn) {
1032 return 1;
1033 } else if (c1cn < c2cn) {
1034 return -1;
1035 }
1036 }
1037
1038 if (c1c.length === c2c.length) {
1039 return 0;
1040 }
1041 return -1;
1042}
1043
1044function makeLinkToId(id) {
1045 let hash = '#' + id;
1046 if (typeof idToSection === 'undefined' || !idToSection[id]) {
1047 return hash;
1048 }
1049 let targetSec = idToSection[id];
1050 return (targetSec === 'index' ? './' : targetSec + '.html') + hash;
1051}
1052
1053function doShortcut(e) {
1054 if (!(e.target instanceof HTMLElement)) {
1055 return;
1056 }
1057 let target = e.target;
1058 let name = target.nodeName.toLowerCase();
1059 if (name === 'textarea' || name === 'input' || name === 'select' || target.isContentEditable) {
1060 return;
1061 }
1062 if (e.altKey || e.ctrlKey || e.metaKey) {
1063 return;
1064 }
1065 if (e.key === 'm' && usesMultipage) {
1066 let pathParts = location.pathname.split('/');
1067 let hash = location.hash;
1068 if (pathParts[pathParts.length - 2] === 'multipage') {
1069 if (hash === '') {
1070 let sectionName = pathParts[pathParts.length - 1];
1071 if (sectionName.endsWith('.html')) {
1072 sectionName = sectionName.slice(0, -5);
1073 }
1074 if (idToSection['sec-' + sectionName] !== undefined) {
1075 hash = '#sec-' + sectionName;
1076 }
1077 }
1078 location = pathParts.slice(0, -2).join('/') + '/' + hash;
1079 } else {
1080 location = 'multipage/' + hash;
1081 }
1082 } else if (e.key === 'u') {
1083 document.documentElement.classList.toggle('show-ao-annotations');
1084 } else if (e.key === '?') {
1085 document.getElementById('shortcuts-help').classList.toggle('active');
1086 }
1087}
1088
1089function init() {
1090 menu = new Menu();
1091 let $container = document.getElementById('spec-container');
1092 $container.addEventListener(
1093 'mouseover',
1094 debounce(e => {
1095 Toolbox.activateIfMouseOver(e);
1096 })
1097 );
1098 document.addEventListener(
1099 'keydown',
1100 debounce(e => {
1101 if (e.code === 'Escape') {
1102 if (Toolbox.active) {
1103 Toolbox.deactivate();
1104 }
1105 document.getElementById('shortcuts-help').classList.remove('active');
1106 }
1107 })
1108 );
1109}
1110
1111document.addEventListener('keypress', doShortcut);
1112
1113document.addEventListener('DOMContentLoaded', () => {
1114 Toolbox.init();
1115 referencePane.init();
1116});
1117
1118// preserve state during navigation
1119
1120function getTocPath(li) {
1121 let path = [];
1122 let pointer = li;
1123 while (true) {
1124 let parent = pointer.parentElement;
1125 if (parent == null) {
1126 return null;
1127 }
1128 let index = [].indexOf.call(parent.children, pointer);
1129 if (index == -1) {
1130 return null;
1131 }
1132 path.unshift(index);
1133 pointer = parent.parentElement;
1134 if (pointer == null) {
1135 return null;
1136 }
1137 if (pointer.id === 'menu-toc') {
1138 break;
1139 }
1140 if (pointer.tagName !== 'LI') {
1141 return null;
1142 }
1143 }
1144 return path;
1145}
1146
1147function activateTocPath(path) {
1148 try {
1149 let pointer = document.getElementById('menu-toc');
1150 for (let index of path) {
1151 pointer = pointer.querySelector('ol').children[index];
1152 }
1153 pointer.classList.add('active');
1154 } catch (e) {
1155 // pass
1156 }
1157}
1158
1159function getActiveTocPaths() {
1160 return [...menu.$menu.querySelectorAll('.active')].map(getTocPath).filter(p => p != null);
1161}
1162
1163function loadStateFromSessionStorage() {
1164 if (!window.sessionStorage || typeof menu === 'undefined' || window.navigating) {
1165 return;
1166 }
1167 if (sessionStorage.referencePaneState != null) {
1168 let state = JSON.parse(sessionStorage.referencePaneState);
1169 if (state != null) {
1170 if (state.type === 'ref') {
1171 let entry = menu.search.biblio.byId[state.id];
1172 if (entry != null) {
1173 referencePane.showReferencesFor(entry);
1174 }
1175 } else if (state.type === 'sdo') {
1176 let sdos = sdoMap[state.id];
1177 if (sdos != null) {
1178 referencePane.$headerText.innerHTML = state.html;
1179 referencePane.showSDOsBody(sdos, state.id);
1180 }
1181 }
1182 delete sessionStorage.referencePaneState;
1183 }
1184 }
1185
1186 if (sessionStorage.activeTocPaths != null) {
1187 document
1188 .getElementById('menu-toc')
1189 .querySelectorAll('.active')
1190 .forEach(e => {
1191 e.classList.remove('active');
1192 });
1193 let active = JSON.parse(sessionStorage.activeTocPaths);
1194 active.forEach(activateTocPath);
1195 delete sessionStorage.activeTocPaths;
1196 }
1197
1198 if (sessionStorage.searchValue != null) {
1199 let value = JSON.parse(sessionStorage.searchValue);
1200 menu.search.$searchBox.value = value;
1201 menu.search.search(value);
1202 delete sessionStorage.searchValue;
1203 }
1204
1205 if (sessionStorage.tocScroll != null) {
1206 let tocScroll = JSON.parse(sessionStorage.tocScroll);
1207 menu.$toc.scrollTop = tocScroll;
1208 delete sessionStorage.tocScroll;
1209 }
1210}
1211
1212document.addEventListener('DOMContentLoaded', loadStateFromSessionStorage);
1213
1214window.addEventListener('pageshow', loadStateFromSessionStorage);
1215
1216window.addEventListener('beforeunload', () => {
1217 if (!window.sessionStorage || typeof menu === 'undefined') {
1218 return;
1219 }
1220 sessionStorage.referencePaneState = JSON.stringify(referencePane.state || null);
1221 sessionStorage.activeTocPaths = JSON.stringify(getActiveTocPaths());
1222 sessionStorage.searchValue = JSON.stringify(menu.search.$searchBox.value);
1223 sessionStorage.tocScroll = JSON.stringify(menu.$toc.scrollTop);
1224});
1225
1226'use strict';
1227let decimalBullet = Array.from({ length: 100 }, (a, i) => '' + (i + 1));
1228let alphaBullet = Array.from({ length: 26 }, (a, i) => String.fromCharCode('a'.charCodeAt(0) + i));
1229
1230// prettier-ignore
1231let 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'];
1232// prettier-ignore
1233let bullets = [decimalBullet, alphaBullet, romanBullet, decimalBullet, alphaBullet, romanBullet];
1234
1235function addStepNumberText(ol, parentIndex) {
1236 for (let i = 0; i < ol.children.length; ++i) {
1237 let child = ol.children[i];
1238 let index = parentIndex.concat([i]);
1239 let applicable = bullets[Math.min(index.length - 1, 5)];
1240 let span = document.createElement('span');
1241 span.textContent = (applicable[i] || '?') + '. ';
1242 span.style.fontSize = '0';
1243 span.setAttribute('aria-hidden', 'true');
1244 child.prepend(span);
1245 let sublist = child.querySelector('ol');
1246 if (sublist != null) {
1247 addStepNumberText(sublist, index);
1248 }
1249 }
1250}
1251document.addEventListener('DOMContentLoaded', () => {
1252 document.querySelectorAll('emu-alg > ol').forEach(ol => {
1253 addStepNumberText(ol, []);
1254 });
1255});
1256
1257let sdoMap = JSON.parse(`{}`);
1258let 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","_ref_306","_ref_307","_ref_308","_ref_309","_ref_310","_ref_311","_ref_312","_ref_313","_ref_314","_ref_315","_ref_316","_ref_317","_ref_318"]},"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_92","_ref_108","_ref_114","_ref_121","_ref_124","_ref_131","_ref_137","_ref_148","_ref_156","_ref_162","_ref_167","_ref_169","_ref_179","_ref_204","_ref_206","_ref_226","_ref_271","_ref_273","_ref_279","_ref_281","_ref_282","_ref_308"]},{"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_197"]},{"type":"production","id":"prod-NumericLiteral","name":"NumericLiteral","referencingIds":["_ref_4","_ref_155","_ref_198"]},{"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_111","_ref_134","_ref_151","_ref_154","_ref_196","_ref_311"]},{"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_172"]},{"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-IsModelHeritage","name":"IsModelHeritage","referencingIds":["_ref_90","_ref_97"]},{"type":"production","id":"prod-ExtendsModelHeritage","name":"ExtendsModelHeritage","referencingIds":["_ref_98"]},{"type":"production","id":"prod-ModelHeritage","name":"ModelHeritage","referencingIds":["_ref_93"]},{"type":"production","id":"prod-ModelBody","name":"ModelBody","referencingIds":["_ref_94","_ref_210"]},{"type":"production","id":"prod-ModelPropertyList","name":"ModelPropertyList","referencingIds":["_ref_99","_ref_100","_ref_102","_ref_104","_ref_173"]},{"type":"production","id":"prod-ModelProperty","name":"ModelProperty","referencingIds":["_ref_101","_ref_103","_ref_105"]},{"type":"production","id":"prod-ModelSpreadProperty","name":"ModelSpreadProperty","referencingIds":["_ref_106"]},{"type":"production","id":"prod-InterfaceStatement","name":"InterfaceStatement","referencingIds":["_ref_81"]},{"type":"production","id":"prod-InterfaceHeritage","name":"InterfaceHeritage","referencingIds":["_ref_115"]},{"type":"production","id":"prod-InterfaceMemberList","name":"InterfaceMemberList","referencingIds":["_ref_117","_ref_119"]},{"type":"production","id":"prod-InterfaceMember","name":"InterfaceMember","referencingIds":["_ref_118","_ref_120"]},{"type":"production","id":"prod-UnionStatement","name":"UnionStatement"},{"type":"production","id":"prod-UnionBody","name":"UnionBody","referencingIds":["_ref_125"]},{"type":"production","id":"prod-UnionVariantList","name":"UnionVariantList","referencingIds":["_ref_126","_ref_128"]},{"type":"production","id":"prod-UnionVariant","name":"UnionVariant","referencingIds":["_ref_127","_ref_129"]},{"type":"production","id":"prod-EnumStatement","name":"EnumStatement","referencingIds":["_ref_85"]},{"type":"production","id":"prod-EnumBody","name":"EnumBody","referencingIds":["_ref_138"]},{"type":"production","id":"prod-EnumMemberList","name":"EnumMemberList","referencingIds":["_ref_139","_ref_140","_ref_142","_ref_144"]},{"type":"production","id":"prod-EnumMember","name":"EnumMember","referencingIds":["_ref_141","_ref_143","_ref_145"]},{"type":"production","id":"prod-EnumSpreadMember","name":"EnumSpreadMember","referencingIds":["_ref_146"]},{"type":"production","id":"prod-EnumMemberValue","name":"EnumMemberValue","referencingIds":["_ref_149","_ref_152"]},{"type":"production","id":"prod-AliasStatement","name":"AliasStatement","referencingIds":["_ref_86"]},{"type":"production","id":"prod-TemplateParameterList","name":"TemplateParameterList","referencingIds":["_ref_158","_ref_160"]},{"type":"production","id":"prod-TemplateParameter","name":"TemplateParameter","referencingIds":["_ref_159","_ref_161"]},{"type":"production","id":"prod-TemplateParameterConstraint","name":"TemplateParameterConstraint","referencingIds":["_ref_163"]},{"type":"production","id":"prod-TemplateParameterDefault","name":"TemplateParameterDefault","referencingIds":["_ref_164"]},{"type":"production","id":"prod-IdentifierList","name":"IdentifierList","referencingIds":["_ref_168","_ref_227","_ref_318"]},{"type":"production","id":"prod-NamespaceStatement","name":"NamespaceStatement","referencingIds":["_ref_82"]},{"type":"production","id":"prod-OperationSignatureDeclaration","name":"OperationSignatureDeclaration","referencingIds":["_ref_176"]},{"type":"production","id":"prod-OperationSignatureReference","name":"OperationSignatureReference","referencingIds":["_ref_177"]},{"type":"production","id":"prod-OperationSignature","name":"OperationSignature","referencingIds":["_ref_122","_ref_181"]},{"type":"production","id":"prod-OperationStatement","name":"OperationStatement","referencingIds":["_ref_83"]},{"type":"production","id":"prod-Expression","name":"Expression","referencingIds":["_ref_95","_ref_96","_ref_109","_ref_112","_ref_132","_ref_135","_ref_157","_ref_165","_ref_166","_ref_174","_ref_209","_ref_212","_ref_214"]},{"type":"production","id":"prod-UnionExpressionOrHigher","name":"UnionExpressionOrHigher","referencingIds":["_ref_182","_ref_184"]},{"type":"production","id":"prod-IntersectionExpressionOrHigher","name":"IntersectionExpressionOrHigher","referencingIds":["_ref_183","_ref_185","_ref_187"]},{"type":"production","id":"prod-ArrayExpressionOrHigher","name":"ArrayExpressionOrHigher","referencingIds":["_ref_186","_ref_188","_ref_190"]},{"type":"production","id":"prod-PrimaryExpression","name":"PrimaryExpression","referencingIds":["_ref_189"]},{"type":"production","id":"prod-Literal","name":"Literal","referencingIds":["_ref_191","_ref_285"]},{"type":"production","id":"prod-ReferenceExpression","name":"ReferenceExpression","referencingIds":["_ref_113","_ref_153","_ref_175","_ref_192","_ref_201","_ref_203","_ref_225"]},{"type":"production","id":"prod-ReferenceExpressionList","name":"ReferenceExpressionList","referencingIds":["_ref_116","_ref_202"]},{"type":"production","id":"prod-IdentifierOrMemberExpression","name":"IdentifierOrMemberExpression","referencingIds":["_ref_76","_ref_87","_ref_171","_ref_199","_ref_205","_ref_217","_ref_276"]},{"type":"production","id":"prod-TemplateArguments","name":"TemplateArguments","referencingIds":["_ref_180","_ref_200"]},{"type":"production","id":"prod-ProjectionArguments","name":"ProjectionArguments"},{"type":"production","id":"prod-ParenthesizedExpression","name":"ParenthesizedExpression","referencingIds":["_ref_193"]},{"type":"production","id":"prod-ModelExpression","name":"ModelExpression","referencingIds":["_ref_194"]},{"type":"production","id":"prod-TupleExpression","name":"TupleExpression","referencingIds":["_ref_195"]},{"type":"production","id":"prod-ExpressionList","name":"ExpressionList","referencingIds":["_ref_207","_ref_208","_ref_211","_ref_213","_ref_219"]},{"type":"production","id":"prod-DecoratorList","name":"DecoratorList","referencingIds":["_ref_75","_ref_88","_ref_91","_ref_107","_ref_110","_ref_123","_ref_130","_ref_133","_ref_136","_ref_147","_ref_150","_ref_170","_ref_178","_ref_215","_ref_307","_ref_310"]},{"type":"production","id":"prod-Decorator","name":"Decorator","referencingIds":["_ref_216"]},{"type":"production","id":"prod-DecoratorArguments","name":"DecoratorArguments","referencingIds":["_ref_218"]},{"type":"production","id":"prod-ProjectionStatement","name":"ProjectionStatement"},{"type":"production","id":"prod-ProjectionSelector","name":"ProjectionSelector","referencingIds":["_ref_220"]},{"type":"production","id":"prod-ProjectionDirection","name":"ProjectionDirection","referencingIds":["_ref_221"]},{"type":"production","id":"prod-ProjectionTag","name":"ProjectionTag","referencingIds":["_ref_222"]},{"type":"production","id":"prod-ProjectionParameters","name":"ProjectionParameters","referencingIds":["_ref_223"]},{"type":"production","id":"prod-ProjectionBody","name":"ProjectionBody","referencingIds":["_ref_224"]},{"type":"production","id":"prod-ProjectionStatementList","name":"ProjectionStatementList","referencingIds":["_ref_228","_ref_230"]},{"type":"production","id":"prod-ProjectionStatementItem","name":"ProjectionStatementItem","referencingIds":["_ref_229","_ref_231"]},{"type":"production","id":"prod-ProjectionExpression","name":"ProjectionExpression","referencingIds":["_ref_234","_ref_290","_ref_292","_ref_293","_ref_294","_ref_296","_ref_309","_ref_312","_ref_313"]},{"type":"production","id":"prod-ProjectionReturnExpression","name":"ProjectionReturnExpression","referencingIds":["_ref_232"]},{"type":"production","id":"prod-ProjectionLogicalOrExpression","name":"ProjectionLogicalOrExpression","referencingIds":["_ref_233","_ref_236"]},{"type":"production","id":"prod-ProjectionLogicalAndExpression","name":"ProjectionLogicalAndExpression","referencingIds":["_ref_235","_ref_237","_ref_239"]},{"type":"production","id":"prod-ProjectionEqualityExpression","name":"ProjectionEqualityExpression","referencingIds":["_ref_242","_ref_244"]},{"type":"production","id":"prod-ProjectionRelationalExpression","name":"ProjectionRelationalExpression","referencingIds":["_ref_238","_ref_240","_ref_241","_ref_243","_ref_245","_ref_247","_ref_249","_ref_251","_ref_253"]},{"type":"production","id":"prod-ProjectionAdditiveExpression","name":"ProjectionAdditiveExpression","referencingIds":["_ref_246","_ref_248","_ref_250","_ref_252","_ref_254","_ref_256","_ref_258"]},{"type":"production","id":"prod-ProjectionMultiplicativeExpression","name":"ProjectionMultiplicativeExpression","referencingIds":["_ref_255","_ref_257","_ref_259","_ref_261","_ref_263"]},{"type":"production","id":"prod-ProjectionUnaryExpression","name":"ProjectionUnaryExpression","referencingIds":["_ref_260","_ref_262","_ref_264","_ref_266"]},{"type":"production","id":"prod-ProjectionCallExpression","name":"ProjectionCallExpression","referencingIds":["_ref_265","_ref_268","_ref_270","_ref_272"]},{"type":"production","id":"prod-ProjectionCallArguments","name":"ProjectionCallArguments","referencingIds":["_ref_269"]},{"type":"production","id":"prod-ProjectionDecoratorReferenceExpression","name":"ProjectionDecoratorReferenceExpression","referencingIds":["_ref_267"]},{"type":"production","id":"prod-ProjectionMemberExpression","name":"ProjectionMemberExpression","referencingIds":["_ref_275","_ref_278","_ref_280"]},{"type":"production","id":"prod-ProjectionPrimaryExpression","name":"ProjectionPrimaryExpression","referencingIds":["_ref_277"]},{"type":"production","id":"prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList","name":"CoverProjectionParenthesizedExpressionAndLambdaParameterList","referencingIds":["_ref_288","_ref_315"]},{"type":"production","id":"prod-ProjectionExpressionList","name":"ProjectionExpressionList","referencingIds":["_ref_274","_ref_289","_ref_291","_ref_314","_ref_317"]},{"type":"production","id":"prod-ProjectionIfExpression","name":"ProjectionIfExpression","referencingIds":["_ref_283","_ref_297"]},{"type":"production","id":"prod-ProjectionModelExpression","name":"ProjectionModelExpression","referencingIds":["_ref_286"]},{"type":"production","id":"prod-ProjectionModelBody","name":"ProjectionModelBody","referencingIds":["_ref_298"]},{"type":"production","id":"prod-ProjectionModelPropertyList","name":"ProjectionModelPropertyList","referencingIds":["_ref_299","_ref_300","_ref_302","_ref_304"]},{"type":"production","id":"prod-ProjectionModelProperty","name":"ProjectionModelProperty","referencingIds":["_ref_301","_ref_303","_ref_305"]},{"type":"production","id":"prod-ProjectionModelSpreadProperty","name":"ProjectionModelSpreadProperty","referencingIds":["_ref_306"]},{"type":"production","id":"prod-ProjectionTupleExpression","name":"ProjectionTupleExpression","referencingIds":["_ref_287"]},{"type":"production","id":"prod-ProjectionLambdaExpression","name":"ProjectionLambdaExpression","referencingIds":["_ref_284"]},{"type":"production","id":"prod-ProjectionBlockExpression","name":"ProjectionBlockExpression","referencingIds":["_ref_295","_ref_316"]},{"type":"production","id":"prod-LambdaParameters","name":"LambdaParameters"},{"type":"clause","id":"syntactic-grammar","titleHTML":"Syntactic Grammar","number":"2"}]}`);
1259;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 {
1260 display: flex;
1261 font-size: 18px;
1262 line-height: 1.5;
1263 font-family: Cambria, Palatino Linotype, Palatino, Liberation Serif, serif;
1264 padding: 0;
1265 margin: 0;
1266 color: #111;
1267}
1268
1269#spec-container {
1270 padding: 0 20px;
1271 flex-grow: 1;
1272 flex-basis: 66%;
1273 box-sizing: border-box;
1274 overflow: hidden;
1275 padding-bottom: 1em;
1276}
1277
1278body.oldtoc {
1279 margin: 0 auto;
1280}
1281
1282a {
1283 text-decoration: none;
1284 color: #206ca7;
1285}
1286
1287a:visited {
1288 color: #206ca7;
1289}
1290
1291a:hover {
1292 text-decoration: underline;
1293 color: #239dee;
1294}
1295
1296a.e-user-code,
1297span.e-user-code {
1298 white-space: nowrap;
1299}
1300
1301a.e-user-code::before,
1302span.e-user-code::before {
1303 display: none;
1304 color: brown;
1305 background-color: white;
1306 border: 2pt solid brown;
1307 padding: 0.3ex;
1308 margin: 0 0.25em 0 0;
1309 line-height: 1;
1310 vertical-align: text-top;
1311 text-transform: uppercase;
1312 font-family: 'Comic Code', sans-serif;
1313 font-weight: 900;
1314 font-size: x-small;
1315}
1316
1317a.e-user-code:hover::before,
1318span.e-user-code:hover::before {
1319 background-color: brown;
1320 color: white;
1321}
1322
1323html.show-ao-annotations a.e-user-code::before,
1324html.show-ao-annotations span.e-user-code::before {
1325 display: inline-block;
1326}
1327
1328a.e-user-code::before,
1329span.e-user-code::before {
1330 content: 'UC';
1331}
1332
1333code {
1334 font-weight: bold;
1335 font-family: Consolas, Monaco, monospace;
1336 white-space: pre;
1337}
1338
1339pre code {
1340 font-weight: inherit;
1341}
1342
1343pre code.hljs {
1344 background-color: #fff;
1345 margin: 0;
1346 padding: 0;
1347}
1348
1349ol.toc {
1350 list-style: none;
1351 padding-left: 0;
1352}
1353
1354ol.toc ol.toc {
1355 padding-left: 2ex;
1356 list-style: none;
1357}
1358
1359var {
1360 color: #2aa198;
1361 transition: background-color 0.25s ease;
1362 cursor: pointer;
1363}
1364
1365var.referenced0 {
1366 color: inherit;
1367 background-color: #ffff33;
1368 box-shadow: 0 0 0 2px #ffff33;
1369}
1370var.referenced1 {
1371 color: inherit;
1372 background-color: #ff87a2;
1373 box-shadow: 0 0 0 2px #ff87a2;
1374}
1375var.referenced2 {
1376 color: inherit;
1377 background-color: #96e885;
1378 box-shadow: 0 0 0 2px #96e885;
1379}
1380var.referenced3 {
1381 color: inherit;
1382 background-color: #3eeed2;
1383 box-shadow: 0 0 0 2px #3eeed2;
1384}
1385var.referenced4 {
1386 color: inherit;
1387 background-color: #eacfb6;
1388 box-shadow: 0 0 0 2px #eacfb6;
1389}
1390var.referenced5 {
1391 color: inherit;
1392 background-color: #82ddff;
1393 box-shadow: 0 0 0 2px #82ddff;
1394}
1395var.referenced6 {
1396 color: inherit;
1397 background-color: #ffbcf2;
1398 box-shadow: 0 0 0 2px #ffbcf2;
1399}
1400
1401emu-const {
1402 font-family: sans-serif;
1403}
1404
1405emu-val {
1406 font-weight: bold;
1407}
1408
1409/* depth 1 */
1410emu-alg ol,
1411/* depth 4 */
1412emu-alg ol ol ol ol,
1413emu-alg ol.nested-thrice,
1414emu-alg ol.nested-twice ol,
1415emu-alg ol.nested-once ol ol {
1416 list-style-type: decimal;
1417}
1418
1419/* depth 2 */
1420emu-alg ol ol,
1421emu-alg ol.nested-once,
1422/* depth 5 */
1423emu-alg ol ol ol ol ol,
1424emu-alg ol.nested-four-times,
1425emu-alg ol.nested-thrice ol,
1426emu-alg ol.nested-twice ol ol,
1427emu-alg ol.nested-once ol ol ol {
1428 list-style-type: lower-alpha;
1429}
1430
1431/* depth 3 */
1432emu-alg ol ol ol,
1433emu-alg ol.nested-twice,
1434emu-alg ol.nested-once ol,
1435/* depth 6 */
1436emu-alg ol ol ol ol ol ol,
1437emu-alg ol.nested-lots,
1438emu-alg ol.nested-four-times ol,
1439emu-alg ol.nested-thrice ol ol,
1440emu-alg ol.nested-twice ol ol ol,
1441emu-alg ol.nested-once ol ol ol ol,
1442/* depth 7+ */
1443emu-alg ol.nested-lots ol {
1444 list-style-type: lower-roman;
1445}
1446
1447emu-eqn {
1448 display: block;
1449 margin-left: 4em;
1450}
1451
1452emu-eqn.inline {
1453 display: inline;
1454 margin: 0;
1455}
1456
1457emu-eqn div:first-child {
1458 margin-left: -2em;
1459}
1460
1461emu-note {
1462 margin: 1em 0;
1463 display: flex;
1464 flex-direction: row;
1465 color: inherit;
1466 border-left: 5px solid #52e052;
1467 background: #e9fbe9;
1468 padding: 10px 10px 10px 0;
1469}
1470
1471emu-note > span.note {
1472 flex-basis: 100px;
1473 min-width: 100px;
1474 flex-grow: 0;
1475 flex-shrink: 1;
1476 text-transform: uppercase;
1477 padding-left: 5px;
1478}
1479
1480emu-note[type='editor'] {
1481 border-left-color: #faa;
1482}
1483
1484emu-note > div.note-contents {
1485 flex-grow: 1;
1486 flex-shrink: 1;
1487 overflow: auto;
1488}
1489
1490emu-note > div.note-contents > p:first-of-type {
1491 margin-top: 0;
1492}
1493
1494emu-note > div.note-contents > p:last-of-type {
1495 margin-bottom: 0;
1496}
1497
1498emu-table td code {
1499 white-space: normal;
1500}
1501
1502emu-figure {
1503 display: block;
1504}
1505
1506emu-example {
1507 display: block;
1508 margin: 1em 3em;
1509}
1510
1511emu-example figure figcaption {
1512 margin-top: 0.5em;
1513 text-align: left;
1514}
1515
1516emu-figure figure,
1517emu-example figure,
1518emu-table figure {
1519 display: flex;
1520 flex-direction: column;
1521 align-items: center;
1522}
1523
1524emu-production {
1525 display: block;
1526}
1527
1528emu-grammar[type='example'] emu-production,
1529emu-grammar[type='definition'] emu-production {
1530 margin-top: 1em;
1531 margin-bottom: 1em;
1532 margin-left: 5ex;
1533}
1534
1535emu-grammar.inline,
1536emu-production.inline,
1537emu-grammar.inline emu-production emu-rhs,
1538emu-production.inline emu-rhs,
1539emu-grammar[collapsed] emu-production emu-rhs {
1540 display: inline;
1541 padding-left: 1ex;
1542 margin-left: 0;
1543}
1544
1545emu-production[collapsed] emu-rhs {
1546 display: inline;
1547 padding-left: 0.5ex;
1548 margin-left: 0;
1549}
1550
1551emu-grammar[collapsed] emu-production,
1552emu-production[collapsed] {
1553 margin: 0;
1554}
1555
1556emu-constraints {
1557 font-size: 0.75em;
1558 margin-right: 0.5ex;
1559}
1560
1561emu-gann {
1562 margin-right: 0.5ex;
1563}
1564
1565emu-gann emu-t:last-child,
1566emu-gann emu-gprose:last-child,
1567emu-gann emu-nt:last-child {
1568 margin-right: 0;
1569}
1570
1571emu-geq {
1572 margin-left: 0.5ex;
1573 font-weight: bold;
1574}
1575
1576emu-oneof {
1577 font-weight: bold;
1578 margin-left: 0.5ex;
1579}
1580
1581emu-nt {
1582 display: inline-block;
1583 font-style: italic;
1584 white-space: nowrap;
1585 text-indent: 0;
1586}
1587
1588emu-nt a,
1589emu-nt a:visited {
1590 color: #333;
1591}
1592
1593emu-rhs emu-nt {
1594 margin-right: 0.5ex;
1595}
1596
1597emu-t {
1598 display: inline-block;
1599 font-family: monospace;
1600 font-weight: bold;
1601 white-space: nowrap;
1602 text-indent: 0;
1603}
1604
1605emu-production emu-t {
1606 margin-right: 0.5ex;
1607}
1608
1609emu-rhs {
1610 display: block;
1611 padding-left: 75px;
1612 text-indent: -25px;
1613}
1614
1615emu-production:not([collapsed]) emu-rhs {
1616 border: 0.2ex dashed transparent;
1617}
1618
1619emu-production:not([collapsed]) emu-rhs:hover {
1620 border-color: #888;
1621 background-color: #f0f0f0;
1622}
1623
1624emu-mods {
1625 font-size: 0.85em;
1626 vertical-align: sub;
1627 font-style: normal;
1628 font-weight: normal;
1629}
1630
1631emu-params,
1632emu-opt {
1633 margin-right: 1ex;
1634 font-family: monospace;
1635}
1636
1637emu-params,
1638emu-constraints {
1639 color: #2aa198;
1640}
1641
1642emu-opt {
1643 color: #b58900;
1644}
1645
1646emu-gprose {
1647 font-size: 0.9em;
1648 font-family: Helvetica, Arial, sans-serif;
1649}
1650
1651emu-production emu-gprose {
1652 margin-right: 1ex;
1653}
1654
1655h1.shortname {
1656 color: #f60;
1657 font-size: 1.5em;
1658 margin: 0;
1659}
1660
1661h1.version {
1662 color: #f60;
1663 font-size: 1.5em;
1664}
1665
1666h1.title {
1667 color: #f60;
1668}
1669
1670h1,
1671h2,
1672h3,
1673h4,
1674h5,
1675h6 {
1676 position: relative;
1677}
1678
1679h1 .secnum {
1680 text-decoration: none;
1681 margin-right: 5px;
1682}
1683
1684h1 span.title {
1685 order: 2;
1686}
1687
1688h1 {
1689 font-size: 2.67em;
1690 margin-bottom: 0;
1691 line-height: 1em;
1692}
1693h2 {
1694 font-size: 2em;
1695}
1696h3 {
1697 font-size: 1.56em;
1698}
1699h4 {
1700 font-size: 1.25em;
1701}
1702h5 {
1703 font-size: 1.11em;
1704}
1705h6 {
1706 font-size: 1em;
1707}
1708
1709pre code.hljs {
1710 background: transparent;
1711}
1712
1713emu-clause[id],
1714emu-annex[id],
1715emu-intro[id] {
1716 scroll-margin-top: 2ex;
1717}
1718
1719emu-intro h1,
1720emu-clause h1,
1721emu-annex h1 {
1722 font-size: 2em;
1723}
1724emu-intro h2,
1725emu-clause h2,
1726emu-annex h2 {
1727 font-size: 1.56em;
1728}
1729emu-intro h3,
1730emu-clause h3,
1731emu-annex h3 {
1732 font-size: 1.25em;
1733}
1734emu-intro h4,
1735emu-clause h4,
1736emu-annex h4 {
1737 font-size: 1.11em;
1738}
1739emu-intro h5,
1740emu-clause h5,
1741emu-annex h5 {
1742 font-size: 1em;
1743}
1744emu-intro h6,
1745emu-clause h6,
1746emu-annex h6 {
1747 font-size: 0.9em;
1748}
1749emu-intro emu-intro h1,
1750emu-clause emu-clause h1,
1751emu-annex emu-annex h1 {
1752 font-size: 1.56em;
1753}
1754emu-intro emu-intro h2,
1755emu-clause emu-clause h2,
1756emu-annex emu-annex h2 {
1757 font-size: 1.25em;
1758}
1759emu-intro emu-intro h3,
1760emu-clause emu-clause h3,
1761emu-annex emu-annex h3 {
1762 font-size: 1.11em;
1763}
1764emu-intro emu-intro h4,
1765emu-clause emu-clause h4,
1766emu-annex emu-annex h4 {
1767 font-size: 1em;
1768}
1769emu-intro emu-intro h5,
1770emu-clause emu-clause h5,
1771emu-annex emu-annex h5 {
1772 font-size: 0.9em;
1773}
1774emu-intro emu-intro emu-intro h1,
1775emu-clause emu-clause emu-clause h1,
1776emu-annex emu-annex emu-annex h1 {
1777 font-size: 1.25em;
1778}
1779emu-intro emu-intro emu-intro h2,
1780emu-clause emu-clause emu-clause h2,
1781emu-annex emu-annex emu-annex h2 {
1782 font-size: 1.11em;
1783}
1784emu-intro emu-intro emu-intro h3,
1785emu-clause emu-clause emu-clause h3,
1786emu-annex emu-annex emu-annex h3 {
1787 font-size: 1em;
1788}
1789emu-intro emu-intro emu-intro h4,
1790emu-clause emu-clause emu-clause h4,
1791emu-annex emu-annex emu-annex h4 {
1792 font-size: 0.9em;
1793}
1794emu-intro emu-intro emu-intro emu-intro h1,
1795emu-clause emu-clause emu-clause emu-clause h1,
1796emu-annex emu-annex emu-annex emu-annex h1 {
1797 font-size: 1.11em;
1798}
1799emu-intro emu-intro emu-intro emu-intro h2,
1800emu-clause emu-clause emu-clause emu-clause h2,
1801emu-annex emu-annex emu-annex emu-annex h2 {
1802 font-size: 1em;
1803}
1804emu-intro emu-intro emu-intro emu-intro h3,
1805emu-clause emu-clause emu-clause emu-clause h3,
1806emu-annex emu-annex emu-annex emu-annex h3 {
1807 font-size: 0.9em;
1808}
1809emu-intro emu-intro emu-intro emu-intro emu-intro h1,
1810emu-clause emu-clause emu-clause emu-clause emu-clause h1,
1811emu-annex emu-annex emu-annex emu-annex emu-annex h1 {
1812 font-size: 1em;
1813}
1814emu-intro emu-intro emu-intro emu-intro emu-intro h2,
1815emu-clause emu-clause emu-clause emu-clause emu-clause h2,
1816emu-annex emu-annex emu-annex emu-annex emu-annex h2 {
1817 font-size: 0.9em;
1818}
1819emu-intro emu-intro emu-intro emu-intro emu-intro emu-intro h1,
1820emu-clause emu-clause emu-clause emu-clause emu-clause emu-clause h1,
1821emu-annex emu-annex emu-annex emu-annex emu-annex emu-annex h1 {
1822 font-size: 0.9em;
1823}
1824
1825emu-clause,
1826emu-intro,
1827emu-annex {
1828 display: block;
1829}
1830
1831/* these values are twice the font-size for the <h1> titles for clauses */
1832emu-intro,
1833emu-clause,
1834emu-annex {
1835 margin-top: 4em;
1836}
1837emu-intro emu-intro,
1838emu-clause emu-clause,
1839emu-annex emu-annex {
1840 margin-top: 3.12em;
1841}
1842emu-intro emu-intro emu-intro,
1843emu-clause emu-clause emu-clause,
1844emu-annex emu-annex emu-annex {
1845 margin-top: 2.5em;
1846}
1847emu-intro emu-intro emu-intro emu-intro,
1848emu-clause emu-clause emu-clause emu-clause,
1849emu-annex emu-annex emu-annex emu-annex {
1850 margin-top: 2.22em;
1851}
1852emu-intro emu-intro emu-intro emu-intro emu-intro,
1853emu-clause emu-clause emu-clause emu-clause emu-clause,
1854emu-annex emu-annex emu-annex emu-annex emu-annex {
1855 margin-top: 2em;
1856}
1857emu-intro emu-intro emu-intro emu-intro emu-intro emu-intro,
1858emu-clause emu-clause emu-clause emu-clause emu-clause emu-clause,
1859emu-annex emu-annex emu-annex emu-annex emu-annex emu-annex {
1860 margin-top: 1.8em;
1861}
1862
1863#spec-container > emu-intro:first-of-type,
1864#spec-container > emu-clause:first-of-type,
1865#spec-container > emu-annex:first-of-type {
1866 margin-top: 0;
1867}
1868
1869/* Figures and tables */
1870figure {
1871 display: block;
1872 margin: 1em 0 3em 0;
1873}
1874figure object {
1875 display: block;
1876 margin: 0 auto;
1877}
1878figure table.real-table {
1879 margin: 0 auto;
1880}
1881figure figcaption {
1882 display: block;
1883 color: #555555;
1884 font-weight: bold;
1885 text-align: center;
1886}
1887
1888emu-table table {
1889 margin: 0 auto;
1890}
1891
1892emu-table table,
1893table.real-table {
1894 border-collapse: collapse;
1895}
1896
1897emu-table td,
1898emu-table th,
1899table.real-table td,
1900table.real-table th {
1901 border: 1px solid black;
1902 padding: 0.4em;
1903 vertical-align: baseline;
1904}
1905emu-table th,
1906emu-table thead td,
1907table.real-table th {
1908 background-color: #eeeeee;
1909}
1910
1911emu-table td {
1912 background: #fff;
1913}
1914
1915/* Note: the left content edges of table.lightweight-table >tbody >tr >td
1916 and div.display line up. */
1917table.lightweight-table {
1918 border-collapse: collapse;
1919 margin: 0 0 0 1.5em;
1920}
1921table.lightweight-table td,
1922table.lightweight-table th {
1923 border: none;
1924 padding: 0 0.5em;
1925 vertical-align: baseline;
1926}
1927
1928/* diff styles */
1929ins {
1930 background-color: #e0f8e0;
1931 text-decoration: none;
1932 border-bottom: 1px solid #396;
1933}
1934
1935del {
1936 background-color: #fee;
1937}
1938
1939ins.block,
1940del.block,
1941emu-production > ins,
1942emu-production > del,
1943emu-grammar > ins,
1944emu-grammar > del {
1945 display: block;
1946}
1947emu-rhs > ins,
1948emu-rhs > del {
1949 display: inline;
1950}
1951
1952tr.ins > td > ins {
1953 border-bottom: none;
1954}
1955
1956tr.ins > td {
1957 background-color: #e0f8e0;
1958}
1959
1960tr.del > td {
1961 background-color: #fee;
1962}
1963
1964/* Menu Styles */
1965#menu-toggle {
1966 font-size: 2em;
1967
1968 position: fixed;
1969 top: 0;
1970 left: 0;
1971 width: 1.5em;
1972 height: 1.5em;
1973 z-index: 3;
1974 visibility: hidden;
1975 color: #1567a2;
1976 background-color: #fff;
1977
1978 line-height: 1.5em;
1979 text-align: center;
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 {
1991 display: flex;
1992 flex-direction: column;
1993 width: 33%;
1994 height: 100vh;
1995 max-width: 500px;
1996 box-sizing: border-box;
1997 background-color: #ddd;
1998 overflow: hidden;
1999 transition: opacity 0.1s linear;
2000 padding: 0 5px;
2001 position: fixed;
2002 left: 0;
2003 top: 0;
2004 border-right: 2px solid #bbb;
2005
2006 z-index: 2;
2007}
2008
2009#menu-spacer {
2010 flex-basis: 33%;
2011 max-width: 500px;
2012 flex-grow: 0;
2013 flex-shrink: 0;
2014}
2015
2016#menu a {
2017 color: #1567a2;
2018}
2019
2020#menu.active {
2021 display: flex;
2022 opacity: 1;
2023 z-index: 2;
2024}
2025
2026#menu-pins {
2027 flex-grow: 1;
2028 display: none;
2029}
2030
2031#menu-pins.active {
2032 display: block;
2033}
2034
2035#menu-pins-list {
2036 margin: 0;
2037 padding: 0;
2038 counter-reset: pins-counter;
2039}
2040
2041#menu-pins-list > li:before {
2042 content: counter(pins-counter);
2043 counter-increment: pins-counter;
2044 display: inline-block;
2045 width: 25px;
2046 text-align: center;
2047 border: 1px solid #bbb;
2048 padding: 2px;
2049 margin: 4px;
2050 box-sizing: border-box;
2051 line-height: 1em;
2052 background-color: #ccc;
2053 border-radius: 4px;
2054}
2055#menu-toc > ol {
2056 padding: 0;
2057 flex-grow: 1;
2058}
2059
2060#menu-toc > ol li {
2061 padding: 0;
2062}
2063
2064#menu-toc > ol,
2065#menu-toc > ol ol {
2066 list-style-type: none;
2067 margin: 0;
2068 padding: 0;
2069}
2070
2071#menu-toc > ol ol {
2072 padding-left: 0.75em;
2073}
2074
2075#menu-toc li {
2076 text-overflow: ellipsis;
2077 overflow: hidden;
2078 white-space: nowrap;
2079}
2080
2081#menu-toc .item-toggle {
2082 display: inline-block;
2083 transform: rotate(-45deg) translate(-5px, -5px);
2084 transition: transform 0.1s ease;
2085 text-align: center;
2086 width: 20px;
2087
2088 color: #aab;
2089
2090 -webkit-touch-callout: none;
2091 -webkit-user-select: none;
2092 -khtml-user-select: none;
2093 -moz-user-select: none;
2094 -ms-user-select: none;
2095 user-select: none;
2096
2097 cursor: pointer;
2098}
2099
2100#menu-toc .item-toggle-none {
2101 display: inline-block;
2102 width: 20px;
2103}
2104
2105#menu-toc li.active > .item-toggle {
2106 transform: rotate(45deg) translate(-5px, -5px);
2107}
2108
2109#menu-toc li > ol {
2110 display: none;
2111}
2112
2113#menu-toc li.active > ol {
2114 display: block;
2115}
2116
2117#menu-toc li.revealed > a {
2118 background-color: #bbb;
2119 font-weight: bold;
2120 /*
2121 background-color: #222;
2122 color: #c6d8e4;
2123 */
2124}
2125
2126#menu-toc li.revealed-leaf > a {
2127 color: #206ca7;
2128 /*
2129 background-color: #222;
2130 color: #c6d8e4;
2131 */
2132}
2133
2134#menu-toc li.revealed > .item-toggle {
2135 transform: rotate(45deg) translate(-5px, -5px);
2136}
2137
2138#menu-toc li.revealed > ol {
2139 display: block;
2140}
2141
2142#menu-toc li > a {
2143 padding: 2px 5px;
2144}
2145
2146#menu > * {
2147 margin-bottom: 5px;
2148}
2149
2150.menu-pane-header {
2151 padding: 0 5px;
2152 text-transform: uppercase;
2153 background-color: #aaa;
2154 color: #335;
2155 font-weight: bold;
2156 letter-spacing: 2px;
2157 flex-grow: 0;
2158 flex-shrink: 0;
2159 font-size: 0.8em;
2160}
2161
2162.menu-pane-header emu-opt,
2163.menu-pane-header emu-t,
2164.menu-pane-header emu-nt {
2165 margin-right: 0px;
2166 display: inline;
2167 color: inherit;
2168}
2169
2170.menu-pane-header emu-rhs {
2171 display: inline;
2172 padding-left: 0px;
2173 text-indent: 0px;
2174}
2175
2176.menu-pane-header emu-geq {
2177 margin-left: 0px;
2178}
2179
2180a.menu-pane-header-production {
2181 color: inherit;
2182}
2183
2184.menu-pane-header-production {
2185 text-transform: none;
2186 letter-spacing: 1.5px;
2187 padding-left: 0.5em;
2188}
2189
2190#menu-toc {
2191 display: flex;
2192 flex-direction: column;
2193 width: 100%;
2194 overflow: hidden;
2195 flex-grow: 1;
2196}
2197
2198#menu-toc ol.toc {
2199 overflow-x: hidden;
2200 overflow-y: auto;
2201}
2202
2203#menu-search {
2204 position: relative;
2205 flex-grow: 0;
2206 flex-shrink: 0;
2207 width: 100%;
2208
2209 display: flex;
2210 flex-direction: column;
2211
2212 max-height: 300px;
2213}
2214
2215#menu-trace-list {
2216 display: none;
2217}
2218
2219#menu-search-box {
2220 box-sizing: border-box;
2221 display: block;
2222 width: 100%;
2223 margin: 5px 0 0 0;
2224 font-size: 1em;
2225 padding: 2px;
2226 background-color: #bbb;
2227 border: 1px solid #999;
2228}
2229
2230#menu-search-results {
2231 overflow-x: hidden;
2232 overflow-y: auto;
2233}
2234
2235li.menu-search-result-clause:before {
2236 content: 'clause';
2237 width: 40px;
2238 display: inline-block;
2239 text-align: right;
2240 padding-right: 1ex;
2241 color: #666;
2242 font-size: 75%;
2243}
2244li.menu-search-result-op:before {
2245 content: 'op';
2246 width: 40px;
2247 display: inline-block;
2248 text-align: right;
2249 padding-right: 1ex;
2250 color: #666;
2251 font-size: 75%;
2252}
2253
2254li.menu-search-result-prod:before {
2255 content: 'prod';
2256 width: 40px;
2257 display: inline-block;
2258 text-align: right;
2259 padding-right: 1ex;
2260 color: #666;
2261 font-size: 75%;
2262}
2263
2264li.menu-search-result-term:before {
2265 content: 'term';
2266 width: 40px;
2267 display: inline-block;
2268 text-align: right;
2269 padding-right: 1ex;
2270 color: #666;
2271 font-size: 75%;
2272}
2273
2274#menu-search-results ul {
2275 padding: 0 5px;
2276 margin: 0;
2277}
2278
2279#menu-search-results li {
2280 white-space: nowrap;
2281 text-overflow: ellipsis;
2282}
2283
2284#menu-trace-list {
2285 counter-reset: item;
2286 margin: 0 0 0 20px;
2287 padding: 0;
2288}
2289#menu-trace-list li {
2290 display: block;
2291 white-space: nowrap;
2292}
2293
2294#menu-trace-list li .secnum:after {
2295 content: ' ';
2296}
2297#menu-trace-list li:before {
2298 content: counter(item) ' ';
2299 background-color: #222;
2300 counter-increment: item;
2301 color: #999;
2302 width: 20px;
2303 height: 20px;
2304 line-height: 20px;
2305 display: inline-block;
2306 text-align: center;
2307 margin: 2px 4px 2px 0;
2308}
2309
2310@media (max-width: 1000px) {
2311 body {
2312 margin: 0;
2313 display: block;
2314 }
2315
2316 #menu {
2317 display: none;
2318 padding-top: 3em;
2319 width: 450px;
2320 }
2321
2322 #menu.active {
2323 position: fixed;
2324 height: 100%;
2325 left: 0;
2326 top: 0;
2327 right: 300px;
2328 }
2329
2330 #menu-toggle {
2331 visibility: visible;
2332 }
2333
2334 #spec-container {
2335 padding: 0 5px;
2336 }
2337
2338 #references-pane-spacer {
2339 display: none;
2340 }
2341}
2342
2343@media only screen and (max-width: 800px) {
2344 #menu {
2345 width: 100%;
2346 }
2347
2348 h1 .secnum:empty {
2349 margin: 0;
2350 padding: 0;
2351 }
2352}
2353
2354/* Toolbox */
2355.toolbox-container {
2356 position: absolute;
2357 display: none;
2358 padding-bottom: 7px;
2359}
2360
2361.toolbox-container.active {
2362 display: inline-block;
2363}
2364
2365.toolbox {
2366 position: relative;
2367 background: #ddd;
2368 border: 1px solid #aaa;
2369 color: #eee;
2370 padding: 5px;
2371 border-radius: 3px;
2372}
2373
2374.toolbox a {
2375 text-decoration: none;
2376 padding: 0 5px;
2377}
2378
2379.toolbox a:hover {
2380 text-decoration: underline;
2381}
2382
2383.toolbox:after,
2384.toolbox:before {
2385 top: 100%;
2386 left: 15px;
2387 border: solid transparent;
2388 content: ' ';
2389 height: 0;
2390 width: 0;
2391 position: absolute;
2392 pointer-events: none;
2393}
2394
2395.toolbox:after {
2396 border-color: rgba(0, 0, 0, 0);
2397 border-top-color: #ddd;
2398 border-width: 10px;
2399 margin-left: -10px;
2400}
2401.toolbox:before {
2402 border-color: rgba(204, 204, 204, 0);
2403 border-top-color: #aaa;
2404 border-width: 12px;
2405 margin-left: -12px;
2406}
2407
2408#references-pane-container {
2409 position: fixed;
2410 bottom: 0;
2411 left: 0;
2412 right: 0;
2413 height: 250px;
2414 display: none;
2415 background-color: #ddd;
2416 z-index: 1;
2417}
2418
2419#references-pane-table-container {
2420 overflow-x: hidden;
2421 overflow-y: auto;
2422}
2423
2424#references-pane-spacer {
2425 flex-basis: 33%;
2426 max-width: 500px;
2427}
2428
2429#references-pane {
2430 flex-grow: 1;
2431 overflow: hidden;
2432 display: flex;
2433 flex-direction: column;
2434}
2435
2436#references-pane-container.active {
2437 display: flex;
2438}
2439
2440#references-pane-close:after {
2441 content: '✖';
2442 float: right;
2443 cursor: pointer;
2444}
2445
2446#references-pane table tr td:first-child {
2447 text-align: right;
2448 padding-right: 5px;
2449}
2450
2451@media print {
2452 #menu-toggle {
2453 display: none;
2454 }
2455}
2456
2457[normative-optional],
2458[legacy] {
2459 border-left: 5px solid #ff6600;
2460 padding: 0.5em;
2461 display: block;
2462 background: #ffeedd;
2463}
2464
2465.clause-attributes-tag {
2466 text-transform: uppercase;
2467 color: #884400;
2468}
2469
2470.clause-attributes-tag a {
2471 color: #884400;
2472}
2473
2474/* Shortcuts help dialog */
2475
2476#shortcuts-help {
2477 position: fixed;
2478 left: 5%;
2479 margin: 0 auto;
2480 right: 5%;
2481 z-index: 10;
2482 top: 10%;
2483 top: calc(5vw + 5vh);
2484 padding: 30px 90px;
2485 max-width: 500px;
2486 outline: solid 10000px rgba(255, 255, 255, 0.6);
2487 border-radius: 5px;
2488 border-width: 1px 1px 0 1px;
2489 background-color: #ddd;
2490 display: none;
2491}
2492
2493#shortcuts-help.active {
2494 display: block;
2495}
2496
2497#shortcuts-help ul {
2498 padding: 0;
2499}
2500
2501#shortcuts-help li {
2502 display: flex;
2503 justify-content: space-between;
2504}
2505
2506#shortcuts-help code {
2507 padding: 3px 10px;
2508 border-radius: 3px;
2509 border-width: 1px 1px 0 1px;
2510 border-color: #bbb;
2511 background-color: #eee;
2512 box-shadow: inset 0 -1px 0 #ccc;
2513}
2514</style></head><body><div id="shortcuts-help">
2515<ul>
2516 <li><span>Toggle shortcuts help</span><code>?</code></li>
2517 <li><span>Toggle "can call user code" annotations</span><code>u</code></li>
2518
2519 <li><span>Jump to search box</span><code>/</code></li>
2520</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">
2521 <title>Menu</title>
2522 <path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
2523 </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">
2524
2525<emu-intro id="intro">
2526<h1>Introduction</h1>
2527<p>This document will eventually have a full specification for Cadl. For now, it just has the grammar below.</p>
2528</emu-intro>
2529
2530<emu-clause id="lexical-grammar">
2531<h1><span class="secnum">1</span> Lexical Grammar</h1>
2532<emu-grammar type="definition"><emu-production name="SourceCharacter" id="prod-SourceCharacter">
2533 <emu-nt><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xks4vqzw">
2534 <emu-gprose>any Unicode code point</emu-gprose>
2535 </emu-rhs>
2536</emu-production>
2537<emu-production name="InputElement" id="prod-InputElement">
2538 <emu-nt><a href="#prod-InputElement">InputElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="orqeuwg2">
2539 <emu-nt id="_ref_0"><a href="#prod-Token">Token</a></emu-nt>
2540 </emu-rhs>
2541 <emu-rhs a="kg5yghiq">
2542 <emu-nt id="_ref_1"><a href="#prod-Trivia">Trivia</a></emu-nt>
2543 </emu-rhs>
2544</emu-production>
2545<emu-production name="Token" id="prod-Token">
2546 <emu-nt><a href="#prod-Token">Token</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="o5jua5_x">
2547 <emu-nt id="_ref_2"><a href="#prod-Keyword">Keyword</a></emu-nt>
2548 </emu-rhs>
2549 <emu-rhs a="bras6mo_">
2550 <emu-nt id="_ref_3"><a href="#prod-Identifier">Identifier</a></emu-nt>
2551 </emu-rhs>
2552 <emu-rhs a="pui0b1rt">
2553 <emu-nt id="_ref_4"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt>
2554 </emu-rhs>
2555 <emu-rhs a="xhtltz00">
2556 <emu-nt id="_ref_5"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2557 </emu-rhs>
2558 <emu-rhs a="7hjz1m8p">
2559 <emu-nt id="_ref_6"><a href="#prod-Punctuator">Punctuator</a></emu-nt>
2560 </emu-rhs>
2561</emu-production>
2562<emu-production name="Trivia" id="prod-Trivia">
2563 <emu-nt><a href="#prod-Trivia">Trivia</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ft16wloj">
2564 <emu-nt id="_ref_7"><a href="#prod-Comment">Comment</a></emu-nt>
2565 </emu-rhs>
2566 <emu-rhs a="fctcswat">
2567 <emu-nt id="_ref_8"><a href="#prod-WhiteSpace">WhiteSpace</a></emu-nt>
2568 </emu-rhs>
2569</emu-production>
2570<emu-production name="Keyword" id="prod-Keyword">
2571 <emu-nt><a href="#prod-Keyword">Keyword</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nqjh_sxl">
2572 <emu-nt id="_ref_9"><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt>
2573 </emu-rhs>
2574 <emu-rhs a="azcs9apw">
2575 <emu-t>import</emu-t>
2576 </emu-rhs>
2577 <emu-rhs a="-mdwbm0b">
2578 <emu-t>model</emu-t>
2579 </emu-rhs>
2580 <emu-rhs a="lpev-y-g">
2581 <emu-t>namespace</emu-t>
2582 </emu-rhs>
2583 <emu-rhs a="ytodrzn0">
2584 <emu-t>op</emu-t>
2585 </emu-rhs>
2586 <emu-rhs a="rmwjtwx9">
2587 <emu-t>extends</emu-t>
2588 </emu-rhs>
2589 <emu-rhs a="8d2nu2lj">
2590 <emu-t>using</emu-t>
2591 </emu-rhs>
2592 <emu-rhs a="71rsbeuh">
2593 <emu-t>interface</emu-t>
2594 </emu-rhs>
2595 <emu-rhs a="hgzzvb8j">
2596 <emu-t>union</emu-t>
2597 </emu-rhs>
2598 <emu-rhs a="4iwu-ggn">
2599 <emu-t>projection</emu-t>
2600 </emu-rhs>
2601 <emu-rhs a="llgnlz3m">
2602 <emu-t>void</emu-t>
2603 </emu-rhs>
2604 <emu-rhs a="vpa-nv19">
2605 <emu-t>never</emu-t>
2606 </emu-rhs>
2607</emu-production>
2608<emu-production name="Identifier" id="prod-Identifier">
2609 <emu-nt><a href="#prod-Identifier">Identifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exwdmcdi">
2610 <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>
2611 </emu-rhs>
2612</emu-production>
2613<emu-production name="IdentifierName" id="prod-IdentifierName">
2614 <emu-nt><a href="#prod-IdentifierName">IdentifierName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="q0afq8g8">
2615 <emu-nt id="_ref_12"><a href="#prod-IdentifierStart">IdentifierStart</a></emu-nt>
2616 </emu-rhs>
2617 <emu-rhs a="amguopqs">
2618 <emu-nt id="_ref_13"><a href="#prod-IdentifierName">IdentifierName</a></emu-nt>
2619 <emu-nt id="_ref_14"><a href="#prod-IdentifierContinue">IdentifierContinue</a></emu-nt>
2620 </emu-rhs>
2621</emu-production>
2622<emu-production name="IdentifierStart" id="prod-IdentifierStart">
2623 <emu-nt><a href="#prod-IdentifierStart">IdentifierStart</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exubo7yu">
2624 <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>
2625 </emu-rhs>
2626</emu-production>
2627<emu-production name="IdentifierContinue" id="prod-IdentifierContinue">
2628 <emu-nt><a href="#prod-IdentifierContinue">IdentifierContinue</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7q8tumk4">
2629 <emu-nt id="_ref_17"><a href="#prod-AsciiLetter">AsciiLetter</a></emu-nt>
2630 </emu-rhs>
2631 <emu-rhs a="s4me4hlz">
2632 <emu-nt id="_ref_18"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt>
2633 </emu-rhs>
2634 <emu-rhs a="emlmkqfm">
2635 <emu-t>$</emu-t>
2636 </emu-rhs>
2637 <emu-rhs a="b1zllonv">
2638 <emu-t>_</emu-t>
2639 </emu-rhs>
2640 <emu-rhs a="hj5v3eoy">
2641 <emu-gprose>any assigned Unicode code point other than U+FFFD 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>
2642 </emu-rhs>
2643</emu-production>
2644<emu-production name="AsciiLetter" oneof="" id="prod-AsciiLetter">
2645 <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>
2646</emu-production>
2647<emu-production name="BooleanLiteral" id="prod-BooleanLiteral">
2648 <emu-nt><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-jc4xg27">
2649 <emu-t>true</emu-t>
2650 </emu-rhs>
2651 <emu-rhs a="i9lgnxtt">
2652 <emu-t>false</emu-t>
2653 </emu-rhs>
2654</emu-production>
2655<emu-production name="NumericLiteral" id="prod-NumericLiteral">
2656 <emu-nt><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gma1bw5s">
2657 <emu-nt id="_ref_19"><a href="#prod-DecimalLiteral">DecimalLiteral</a></emu-nt>
2658 </emu-rhs>
2659 <emu-rhs a="hqxkzjla">
2660 <emu-nt id="_ref_20"><a href="#prod-HexIntegerLiteral">HexIntegerLiteral</a></emu-nt>
2661 </emu-rhs>
2662 <emu-rhs a="09cd3aiw">
2663 <emu-nt id="_ref_21"><a href="#prod-BinaryIntegerLiteral">BinaryIntegerLiteral</a></emu-nt>
2664 </emu-rhs>
2665</emu-production>
2666<emu-production name="DecimalLiteral" id="prod-DecimalLiteral">
2667 <emu-nt><a href="#prod-DecimalLiteral">DecimalLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3xiaxvcb">
2668 <emu-nt id="_ref_22"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2669 <emu-t>.</emu-t>
2670 <emu-nt id="_ref_23"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2671 <emu-nt optional="" id="_ref_24"><a href="#prod-ExponentPart">ExponentPart</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2672 </emu-rhs>
2673 <emu-rhs a="e9uvir9w">
2674 <emu-nt id="_ref_25"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2675 <emu-nt optional="" id="_ref_26"><a href="#prod-ExponentPart">ExponentPart</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2676 </emu-rhs>
2677</emu-production>
2678<emu-production name="DecimalIntegerLiteral" id="prod-DecimalIntegerLiteral">
2679 <emu-nt><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxtox5eb">
2680 <emu-nt id="_ref_27"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2681 </emu-rhs>
2682 <emu-rhs a="o9f-v3mh">
2683 <emu-t>+</emu-t>
2684 <emu-nt id="_ref_28"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2685 </emu-rhs>
2686 <emu-rhs a="waadsnwo">
2687 <emu-t>-</emu-t>
2688 <emu-nt id="_ref_29"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2689 </emu-rhs>
2690</emu-production>
2691<emu-production name="DecimalDigits" id="prod-DecimalDigits">
2692 <emu-nt><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s4me4hlz">
2693 <emu-nt id="_ref_30"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt>
2694 </emu-rhs>
2695 <emu-rhs a="nyugv7lw">
2696 <emu-nt id="_ref_31"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2697 <emu-nt id="_ref_32"><a href="#prod-DecimalDigit">DecimalDigit</a></emu-nt>
2698 </emu-rhs>
2699</emu-production>
2700<emu-production name="DecimalDigit" oneof="" id="prod-DecimalDigit">
2701 <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>
2702</emu-production>
2703<emu-production name="ExponentPart" id="prod-ExponentPart">
2704 <emu-nt><a href="#prod-ExponentPart">ExponentPart</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jb-iaug">
2705 <emu-t>e</emu-t>
2706 <emu-nt id="_ref_33"><a href="#prod-DecimalIntegerLiteral">DecimalIntegerLiteral</a></emu-nt>
2707 </emu-rhs>
2708</emu-production>
2709<emu-production name="DecimalIntegerInteger" id="prod-DecimalIntegerInteger">
2710 <emu-nt><a href="#prod-DecimalIntegerInteger">DecimalIntegerInteger</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxtox5eb">
2711 <emu-nt id="_ref_34"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2712 </emu-rhs>
2713 <emu-rhs a="o9f-v3mh">
2714 <emu-t>+</emu-t>
2715 <emu-nt id="_ref_35"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2716 </emu-rhs>
2717 <emu-rhs a="waadsnwo">
2718 <emu-t>-</emu-t>
2719 <emu-nt id="_ref_36"><a href="#prod-DecimalDigits">DecimalDigits</a></emu-nt>
2720 </emu-rhs>
2721</emu-production>
2722<emu-production name="HexIntegerLiteral" id="prod-HexIntegerLiteral">
2723 <emu-nt><a href="#prod-HexIntegerLiteral">HexIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zxvbgn4l">
2724 <emu-t>0x</emu-t>
2725 <emu-nt id="_ref_37"><a href="#prod-HexDigits">HexDigits</a></emu-nt>
2726 </emu-rhs>
2727</emu-production>
2728<emu-production name="HexDigits" id="prod-HexDigits">
2729 <emu-nt><a href="#prod-HexDigits">HexDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="omskcs0d">
2730 <emu-nt id="_ref_38"><a href="#prod-HexDigit">HexDigit</a></emu-nt>
2731 </emu-rhs>
2732 <emu-rhs a="yciymy2l">
2733 <emu-nt id="_ref_39"><a href="#prod-HexDigits">HexDigits</a></emu-nt>
2734 <emu-nt id="_ref_40"><a href="#prod-HexDigit">HexDigit</a></emu-nt>
2735 </emu-rhs>
2736</emu-production>
2737<emu-production name="HexDigit" oneof="" id="prod-HexDigit">
2738 <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>
2739</emu-production>
2740<emu-production name="BinaryIntegerLiteral" id="prod-BinaryIntegerLiteral">
2741 <emu-nt><a href="#prod-BinaryIntegerLiteral">BinaryIntegerLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ya14f57w">
2742 <emu-t>0b</emu-t>
2743 <emu-nt id="_ref_41"><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt>
2744 </emu-rhs>
2745</emu-production>
2746<emu-production name="BinaryDigits" id="prod-BinaryDigits">
2747 <emu-nt><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="5fhui2lc">
2748 <emu-nt id="_ref_42"><a href="#prod-BinaryDigit">BinaryDigit</a></emu-nt>
2749 </emu-rhs>
2750 <emu-rhs a="gqp0qw4u">
2751 <emu-nt id="_ref_43"><a href="#prod-BinaryDigits">BinaryDigits</a></emu-nt>
2752 <emu-nt id="_ref_44"><a href="#prod-BinaryDigit">BinaryDigit</a></emu-nt>
2753 </emu-rhs>
2754</emu-production>
2755<emu-production name="BinaryDigit" oneof="" id="prod-BinaryDigit">
2756 <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>
2757</emu-production>
2758<emu-production name="StringLiteral" id="prod-StringLiteral">
2759 <emu-nt><a href="#prod-StringLiteral">StringLiteral</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vxwiv5cv">
2760 <emu-t>"</emu-t>
2761 <emu-nt optional="" id="_ref_45"><a href="#prod-StringCharacters">StringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2762 <emu-t>"</emu-t>
2763 </emu-rhs>
2764 <emu-rhs a="rvjavihc">
2765 <emu-t>"""</emu-t>
2766 <emu-nt optional="" id="_ref_46"><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2767 <emu-t>"""</emu-t>
2768 </emu-rhs>
2769</emu-production>
2770<emu-production name="StringCharacters" id="prod-StringCharacters">
2771 <emu-nt><a href="#prod-StringCharacters">StringCharacters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dwizkn7f">
2772 <emu-nt id="_ref_47"><a href="#prod-StringCharacter">StringCharacter</a></emu-nt>
2773 <emu-nt optional="" id="_ref_48"><a href="#prod-StringCharacters">StringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2774 </emu-rhs>
2775</emu-production>
2776<emu-production name="StringCharacter" id="prod-StringCharacter">
2777 <emu-nt><a href="#prod-StringCharacter">StringCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qh-v7bpd">
2778 <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>LineTerminator</emu-nt></emu-gmod>
2779 </emu-rhs>
2780 <emu-rhs a="o0wqskax">
2781 <emu-t>\</emu-t>
2782 <emu-nt id="_ref_50"><a href="#prod-EscapeCharacter">EscapeCharacter</a></emu-nt>
2783 </emu-rhs>
2784</emu-production>
2785<emu-production name="TripleQuotedStringCharacters" id="prod-TripleQuotedStringCharacters">
2786 <emu-nt><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w2enq7kq">
2787 <emu-nt id="_ref_51"><a href="#prod-TripleQuotedStringCharacter">TripleQuotedStringCharacter</a></emu-nt>
2788 <emu-nt optional="" id="_ref_52"><a href="#prod-TripleQuotedStringCharacters">TripleQuotedStringCharacters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2789 </emu-rhs>
2790</emu-production>
2791<emu-production name="TripleQuotedStringCharacter" id="prod-TripleQuotedStringCharacter">
2792 <emu-nt><a href="#prod-TripleQuotedStringCharacter">TripleQuotedStringCharacter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ulzuti3k">
2793 <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>
2794 </emu-rhs>
2795 <emu-rhs a="o0wqskax">
2796 <emu-t>\</emu-t>
2797 <emu-nt id="_ref_54"><a href="#prod-EscapeCharacter">EscapeCharacter</a></emu-nt>
2798 </emu-rhs>
2799</emu-production>
2800<emu-production name="EscapeCharacter" oneof="" id="prod-EscapeCharacter">
2801 <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>
2802</emu-production>
2803<emu-production name="Punctuator" oneof="" id="prod-Punctuator">
2804 <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>
2805</emu-production>
2806<emu-production name="WhiteSpace" id="prod-WhiteSpace">
2807 <emu-nt><a href="#prod-WhiteSpace">WhiteSpace</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="k4soaizl">
2808 <emu-gprose>&lt;TAB&gt;</emu-gprose>
2809 </emu-rhs>
2810 <emu-rhs a="eznvjwhz">
2811 <emu-gprose>&lt;LF&gt;</emu-gprose>
2812 </emu-rhs>
2813 <emu-rhs a="w_cit1lu">
2814 <emu-gprose>&lt;VT&gt;</emu-gprose>
2815 </emu-rhs>
2816 <emu-rhs a="dvfflmsr">
2817 <emu-gprose>&lt;FF&gt;</emu-gprose>
2818 </emu-rhs>
2819 <emu-rhs a="q1yr1eki">
2820 <emu-gprose>&lt;CR&gt;</emu-gprose>
2821 </emu-rhs>
2822 <emu-rhs a="01dfufyk">
2823 <emu-gprose>&lt;SP&gt;</emu-gprose>
2824 </emu-rhs>
2825 <emu-rhs a="_fwb4uzc">
2826 <emu-gprose>&lt;NEL&gt;</emu-gprose>
2827 </emu-rhs>
2828 <emu-rhs a="rdfm2xfx">
2829 <emu-gprose>&lt;LRM&gt;</emu-gprose>
2830 </emu-rhs>
2831 <emu-rhs a="t_zqlt0-">
2832 <emu-gprose>&lt;RLM&gt;</emu-gprose>
2833 </emu-rhs>
2834 <emu-rhs a="eaiqsw9w">
2835 <emu-gprose>&lt;LS&gt;</emu-gprose>
2836 </emu-rhs>
2837 <emu-rhs a="z8h10fxn">
2838 <emu-gprose>&lt;PS&gt;</emu-gprose>
2839 </emu-rhs>
2840</emu-production>
2841<emu-production name="Comment" id="prod-Comment">
2842 <emu-nt><a href="#prod-Comment">Comment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sieyeref">
2843 <emu-nt id="_ref_55"><a href="#prod-MultiLineComment">MultiLineComment</a></emu-nt>
2844 </emu-rhs>
2845 <emu-rhs a="sscrkqcd">
2846 <emu-nt id="_ref_56"><a href="#prod-SingleLineComment">SingleLineComment</a></emu-nt>
2847 </emu-rhs>
2848</emu-production>
2849<emu-production name="MultiLineComment" id="prod-MultiLineComment">
2850 <emu-nt><a href="#prod-MultiLineComment">MultiLineComment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hhzm60cr">
2851 <emu-t>/*</emu-t>
2852 <emu-nt optional="" id="_ref_57"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2853 <emu-t>*/</emu-t>
2854 </emu-rhs>
2855</emu-production>
2856<emu-production name="MultiLineCommentChars" id="prod-MultiLineCommentChars">
2857 <emu-nt><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jkbv-8n6">
2858 <emu-nt id="_ref_58"><a href="#prod-MultiLineNotAsteriskChar">MultiLineNotAsteriskChar</a></emu-nt>
2859 <emu-nt optional="" id="_ref_59"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2860 </emu-rhs>
2861 <emu-rhs a="b8trwjej">
2862 <emu-t>*</emu-t>
2863 <emu-nt optional="" id="_ref_60"><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2864 </emu-rhs>
2865</emu-production>
2866<emu-production name="PostAsteriskCommentChars" id="prod-PostAsteriskCommentChars">
2867 <emu-nt><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jwfqbwpm">
2868 <emu-nt id="_ref_61"><a href="#prod-MultiLineNotForwardSlashOrAsteriskChar">MultiLineNotForwardSlashOrAsteriskChar</a></emu-nt>
2869 <emu-nt optional="" id="_ref_62"><a href="#prod-MultiLineCommentChars">MultiLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2870 </emu-rhs>
2871 <emu-rhs a="b8trwjej">
2872 <emu-t>*</emu-t>
2873 <emu-nt optional="" id="_ref_63"><a href="#prod-PostAsteriskCommentChars">PostAsteriskCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2874 </emu-rhs>
2875</emu-production>
2876<emu-production name="MultiLineNotAsteriskChar" id="prod-MultiLineNotAsteriskChar">
2877 <emu-nt><a href="#prod-MultiLineNotAsteriskChar">MultiLineNotAsteriskChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lflef8ko">
2878 <emu-nt id="_ref_64"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-t>*</emu-t></emu-gmod>
2879 </emu-rhs>
2880</emu-production>
2881<emu-production name="MultiLineNotForwardSlashOrAsteriskChar" id="prod-MultiLineNotForwardSlashOrAsteriskChar">
2882 <emu-nt><a href="#prod-MultiLineNotForwardSlashOrAsteriskChar">MultiLineNotForwardSlashOrAsteriskChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hdfnrv5z">
2883 <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>
2884 </emu-rhs>
2885</emu-production>
2886<emu-production name="SingleLineComment" id="prod-SingleLineComment">
2887 <emu-nt><a href="#prod-SingleLineComment">SingleLineComment</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="u-3whel6">
2888 <emu-t>//</emu-t>
2889 <emu-nt optional="" id="_ref_66"><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2890 </emu-rhs>
2891</emu-production>
2892<emu-production name="SingleLineCommentChars" id="prod-SingleLineCommentChars">
2893 <emu-nt><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rshuryvh">
2894 <emu-nt id="_ref_67"><a href="#prod-SingleLineCommentChar">SingleLineCommentChar</a></emu-nt>
2895 <emu-nt optional="" id="_ref_68"><a href="#prod-SingleLineCommentChars">SingleLineCommentChars</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2896 </emu-rhs>
2897</emu-production>
2898<emu-production name="SingleLineCommentChar" id="prod-SingleLineCommentChar">
2899 <emu-nt><a href="#prod-SingleLineCommentChar">SingleLineCommentChar</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lvvfp8iw">
2900 <emu-nt id="_ref_69"><a href="#prod-SourceCharacter">SourceCharacter</a></emu-nt> <emu-gmod>but not <emu-nt>LineTerminator</emu-nt></emu-gmod>
2901 </emu-rhs>
2902</emu-production>
2903</emu-grammar>
2904</emu-clause>
2905
2906<emu-clause id="syntactic-grammar">
2907<h1><span class="secnum">2</span> Syntactic Grammar</h1>
2908<emu-grammar type="definition"><emu-production name="CadlScriptItemList" id="prod-CadlScriptItemList">
2909 <emu-nt><a href="#prod-CadlScriptItemList">CadlScriptItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fihs1zye">
2910 <emu-nt optional="" id="_ref_70"><a href="#prod-CadlScriptItemList">CadlScriptItemList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2911 <emu-nt id="_ref_71"><a href="#prod-CadlScriptItem">CadlScriptItem</a></emu-nt>
2912 </emu-rhs>
2913</emu-production>
2914<emu-production name="CadlScriptItem" id="prod-CadlScriptItem">
2915 <emu-nt><a href="#prod-CadlScriptItem">CadlScriptItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sgwx93oj">
2916 <emu-nt id="_ref_72"><a href="#prod-BlocklessNamespaceStatement">BlocklessNamespaceStatement</a></emu-nt>
2917 </emu-rhs>
2918 <emu-rhs a="zi_5hwi0">
2919 <emu-nt id="_ref_73"><a href="#prod-ImportStatement">ImportStatement</a></emu-nt>
2920 </emu-rhs>
2921 <emu-rhs a="pyyivtxj">
2922 <emu-nt id="_ref_74"><a href="#prod-Statement">Statement</a></emu-nt>
2923 </emu-rhs>
2924</emu-production>
2925<emu-production name="BlocklessNamespaceStatement" id="prod-BlocklessNamespaceStatement">
2926 <emu-nt><a href="#prod-BlocklessNamespaceStatement">BlocklessNamespaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="woshe1r5">
2927 <emu-nt optional="" id="_ref_75"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2928 <emu-t>namespace</emu-t>
2929 <emu-nt id="_ref_76"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
2930 <emu-t>;</emu-t>
2931 </emu-rhs>
2932</emu-production>
2933<emu-production name="ImportStatement" id="prod-ImportStatement">
2934 <emu-nt><a href="#prod-ImportStatement">ImportStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fhkncxvv">
2935 <emu-t>import</emu-t>
2936 <emu-nt id="_ref_77"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
2937 <emu-t>;</emu-t>
2938 </emu-rhs>
2939</emu-production>
2940<emu-production name="StatementList" id="prod-StatementList">
2941 <emu-nt><a href="#prod-StatementList">StatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ssyorrl_">
2942 <emu-nt optional="" id="_ref_78"><a href="#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2943 <emu-nt id="_ref_79"><a href="#prod-Statement">Statement</a></emu-nt>
2944 </emu-rhs>
2945</emu-production>
2946<emu-production name="Statement" id="prod-Statement">
2947 <emu-nt><a href="#prod-Statement">Statement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ngbc4m7o">
2948 <emu-nt id="_ref_80"><a href="#prod-ModelStatement">ModelStatement</a></emu-nt>
2949 </emu-rhs>
2950 <emu-rhs a="qhwhhau7">
2951 <emu-nt id="_ref_81"><a href="#prod-InterfaceStatement">InterfaceStatement</a></emu-nt>
2952 </emu-rhs>
2953 <emu-rhs a="_ljtj5og">
2954 <emu-nt id="_ref_82"><a href="#prod-NamespaceStatement">NamespaceStatement</a></emu-nt>
2955 </emu-rhs>
2956 <emu-rhs a="qlyu8ssa">
2957 <emu-nt id="_ref_83"><a href="#prod-OperationStatement">OperationStatement</a></emu-nt>
2958 </emu-rhs>
2959 <emu-rhs a="rmuscggd">
2960 <emu-nt id="_ref_84"><a href="#prod-UsingStatement">UsingStatement</a></emu-nt>
2961 </emu-rhs>
2962 <emu-rhs a="fwtcv5di">
2963 <emu-nt id="_ref_85"><a href="#prod-EnumStatement">EnumStatement</a></emu-nt>
2964 </emu-rhs>
2965 <emu-rhs a="dzlcgyrg">
2966 <emu-nt id="_ref_86"><a href="#prod-AliasStatement">AliasStatement</a></emu-nt>
2967 </emu-rhs>
2968 <emu-rhs a="sg2sawim">
2969 <emu-t>;</emu-t>
2970 </emu-rhs>
2971</emu-production>
2972<emu-production name="UsingStatement" id="prod-UsingStatement">
2973 <emu-nt><a href="#prod-UsingStatement">UsingStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nfxtjnnc">
2974 <emu-t>using</emu-t>
2975 <emu-nt id="_ref_87"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
2976 <emu-t>;</emu-t>
2977 </emu-rhs>
2978</emu-production>
2979<emu-production name="ModelStatement" id="prod-ModelStatement">
2980 <emu-nt><a href="#prod-ModelStatement">ModelStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gfgooj2_">
2981 <emu-nt optional="" id="_ref_88"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2982 <emu-t>model</emu-t>
2983 <emu-nt id="_ref_89"><a href="#prod-Identifier">Identifier</a></emu-nt>
2984 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2985 <emu-nt id="_ref_90"><a href="#prod-IsModelHeritage">IsModelHeritage</a></emu-nt>
2986 <emu-t>;</emu-t>
2987 </emu-rhs>
2988 <emu-rhs a="w3a1y-ib">
2989 <emu-nt optional="" id="_ref_91"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2990 <emu-t>model</emu-t>
2991 <emu-nt id="_ref_92"><a href="#prod-Identifier">Identifier</a></emu-nt>
2992 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2993 <emu-nt optional="" id="_ref_93"><a href="#prod-ModelHeritage">ModelHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2994 <emu-t>{</emu-t>
2995 <emu-nt optional="" id="_ref_94"><a href="#prod-ModelBody">ModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
2996 <emu-t>}</emu-t>
2997 </emu-rhs>
2998</emu-production>
2999<emu-production name="IsModelHeritage" id="prod-IsModelHeritage">
3000 <emu-nt><a href="#prod-IsModelHeritage">IsModelHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2ovkkwuf">
3001 <emu-t>is</emu-t>
3002 <emu-nt id="_ref_95"><a href="#prod-Expression">Expression</a></emu-nt>
3003 </emu-rhs>
3004</emu-production>
3005<emu-production name="ExtendsModelHeritage" id="prod-ExtendsModelHeritage">
3006 <emu-nt><a href="#prod-ExtendsModelHeritage">ExtendsModelHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gfhzfpr0">
3007 <emu-t>extends</emu-t>
3008 <emu-nt id="_ref_96"><a href="#prod-Expression">Expression</a></emu-nt>
3009 </emu-rhs>
3010</emu-production>
3011<emu-production name="ModelHeritage" id="prod-ModelHeritage">
3012 <emu-nt><a href="#prod-ModelHeritage">ModelHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8ixhxewq">
3013 <emu-nt id="_ref_97"><a href="#prod-IsModelHeritage">IsModelHeritage</a></emu-nt>
3014 </emu-rhs>
3015 <emu-rhs a="tzgvs4ft">
3016 <emu-nt id="_ref_98"><a href="#prod-ExtendsModelHeritage">ExtendsModelHeritage</a></emu-nt>
3017 </emu-rhs>
3018</emu-production>
3019<emu-production name="ModelBody" id="prod-ModelBody">
3020 <emu-nt><a href="#prod-ModelBody">ModelBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nd7shwc0">
3021 <emu-nt id="_ref_99"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
3022 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3023 </emu-rhs>
3024 <emu-rhs a="-duy8rb1">
3025 <emu-nt id="_ref_100"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
3026 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3027 </emu-rhs>
3028</emu-production>
3029<emu-production name="ModelPropertyList" id="prod-ModelPropertyList">
3030 <emu-nt><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ghoz7lyz">
3031 <emu-nt id="_ref_101"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt>
3032 </emu-rhs>
3033 <emu-rhs a="vf9tzeyl">
3034 <emu-nt id="_ref_102"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
3035 <emu-t>,</emu-t>
3036 <emu-nt id="_ref_103"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt>
3037 </emu-rhs>
3038 <emu-rhs a="lzgybwma">
3039 <emu-nt id="_ref_104"><a href="#prod-ModelPropertyList">ModelPropertyList</a></emu-nt>
3040 <emu-t>;</emu-t>
3041 <emu-nt id="_ref_105"><a href="#prod-ModelProperty">ModelProperty</a></emu-nt>
3042 </emu-rhs>
3043</emu-production>
3044<emu-production name="ModelProperty" id="prod-ModelProperty">
3045 <emu-nt><a href="#prod-ModelProperty">ModelProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gibki9cu">
3046 <emu-nt id="_ref_106"><a href="#prod-ModelSpreadProperty">ModelSpreadProperty</a></emu-nt>
3047 </emu-rhs>
3048 <emu-rhs a="77nrmgnp">
3049 <emu-nt optional="" id="_ref_107"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3050 <emu-nt id="_ref_108"><a href="#prod-Identifier">Identifier</a></emu-nt>
3051 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3052 <emu-t>:</emu-t>
3053 <emu-nt id="_ref_109"><a href="#prod-Expression">Expression</a></emu-nt>
3054 </emu-rhs>
3055 <emu-rhs a="vmgvgt2o">
3056 <emu-nt optional="" id="_ref_110"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3057 <emu-nt id="_ref_111"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3058 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3059 <emu-t>:</emu-t>
3060 <emu-nt id="_ref_112"><a href="#prod-Expression">Expression</a></emu-nt>
3061 </emu-rhs>
3062</emu-production>
3063<emu-production name="ModelSpreadProperty" id="prod-ModelSpreadProperty">
3064 <emu-nt><a href="#prod-ModelSpreadProperty">ModelSpreadProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r9kkoml-">
3065 <emu-t>...</emu-t>
3066 <emu-nt id="_ref_113"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3067 </emu-rhs>
3068</emu-production>
3069<emu-production name="InterfaceStatement" id="prod-InterfaceStatement">
3070 <emu-nt><a href="#prod-InterfaceStatement">InterfaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="exjnkaev">
3071 <emu-t>interface</emu-t>
3072 <emu-nt id="_ref_114"><a href="#prod-Identifier">Identifier</a></emu-nt>
3073 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3074 <emu-nt optional="" id="_ref_115"><a href="#prod-InterfaceHeritage">InterfaceHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3075 <emu-t>{</emu-t>
3076 <emu-nt optional="">InterfaceBody<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3077 <emu-t>}</emu-t>
3078 </emu-rhs>
3079</emu-production>
3080<emu-production name="InterfaceHeritage" id="prod-InterfaceHeritage">
3081 <emu-nt><a href="#prod-InterfaceHeritage">InterfaceHeritage</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ie0hgn59">
3082 <emu-t>extends</emu-t>
3083 <emu-nt id="_ref_116"><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt>
3084 </emu-rhs>
3085 <emu-rhs a="s2k4ex-k">
3086 <emu-nt>InterfaceBody</emu-nt>
3087 </emu-rhs>
3088 <emu-rhs a="w_aa5rjr">
3089 <emu-nt id="_ref_117"><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt>
3090 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3091 </emu-rhs>
3092</emu-production>
3093<emu-production name="InterfaceMemberList" id="prod-InterfaceMemberList">
3094 <emu-nt><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xakzxkez">
3095 <emu-nt id="_ref_118"><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt>
3096 </emu-rhs>
3097 <emu-rhs a="erjllshi">
3098 <emu-nt id="_ref_119"><a href="#prod-InterfaceMemberList">InterfaceMemberList</a></emu-nt>
3099 <emu-t>;</emu-t>
3100 <emu-nt id="_ref_120"><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt>
3101 </emu-rhs>
3102</emu-production>
3103<emu-production name="InterfaceMember" id="prod-InterfaceMember">
3104 <emu-nt><a href="#prod-InterfaceMember">InterfaceMember</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="amlwgryq">
3105 <emu-t optional="">op<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3106 <emu-nt id="_ref_121"><a href="#prod-Identifier">Identifier</a></emu-nt>
3107 <emu-nt id="_ref_122"><a href="#prod-OperationSignature">OperationSignature</a></emu-nt>
3108 </emu-rhs>
3109</emu-production>
3110<emu-production name="UnionStatement" id="prod-UnionStatement">
3111 <emu-nt><a href="#prod-UnionStatement">UnionStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jqsx6v8u">
3112 <emu-nt optional="" id="_ref_123"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3113 <emu-t>union</emu-t>
3114 <emu-nt id="_ref_124"><a href="#prod-Identifier">Identifier</a></emu-nt>
3115 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3116 <emu-t>{</emu-t>
3117 <emu-nt optional="" id="_ref_125"><a href="#prod-UnionBody">UnionBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3118 <emu-t>}</emu-t>
3119 </emu-rhs>
3120</emu-production>
3121<emu-production name="UnionBody" id="prod-UnionBody">
3122 <emu-nt><a href="#prod-UnionBody">UnionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lauvayzn">
3123 <emu-nt id="_ref_126"><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt>
3124 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3125 </emu-rhs>
3126</emu-production>
3127<emu-production name="UnionVariantList" id="prod-UnionVariantList">
3128 <emu-nt><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfhz-n9b">
3129 <emu-nt id="_ref_127"><a href="#prod-UnionVariant">UnionVariant</a></emu-nt>
3130 </emu-rhs>
3131 <emu-rhs a="b_wjyurc">
3132 <emu-nt id="_ref_128"><a href="#prod-UnionVariantList">UnionVariantList</a></emu-nt>
3133 <emu-t>;</emu-t>
3134 <emu-nt id="_ref_129"><a href="#prod-UnionVariant">UnionVariant</a></emu-nt>
3135 </emu-rhs>
3136</emu-production>
3137<emu-production name="UnionVariant" id="prod-UnionVariant">
3138 <emu-nt><a href="#prod-UnionVariant">UnionVariant</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="h9gqpl1v">
3139 <emu-nt optional="" id="_ref_130"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3140 <emu-nt id="_ref_131"><a href="#prod-Identifier">Identifier</a></emu-nt>
3141 <emu-t>:</emu-t>
3142 <emu-nt id="_ref_132"><a href="#prod-Expression">Expression</a></emu-nt>
3143 </emu-rhs>
3144 <emu-rhs a="2mhcutnm">
3145 <emu-nt optional="" id="_ref_133"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3146 <emu-nt id="_ref_134"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3147 <emu-t>:</emu-t>
3148 <emu-nt id="_ref_135"><a href="#prod-Expression">Expression</a></emu-nt>
3149 </emu-rhs>
3150</emu-production>
3151<emu-production name="EnumStatement" id="prod-EnumStatement">
3152 <emu-nt><a href="#prod-EnumStatement">EnumStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i7ob7wbq">
3153 <emu-nt optional="" id="_ref_136"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3154 <emu-t>enum</emu-t>
3155 <emu-nt id="_ref_137"><a href="#prod-Identifier">Identifier</a></emu-nt>
3156 <emu-t>{</emu-t>
3157 <emu-nt optional="" id="_ref_138"><a href="#prod-EnumBody">EnumBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3158 <emu-t>}</emu-t>
3159 </emu-rhs>
3160</emu-production>
3161<emu-production name="EnumBody" id="prod-EnumBody">
3162 <emu-nt><a href="#prod-EnumBody">EnumBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ag--srfg">
3163 <emu-nt id="_ref_139"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
3164 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3165 </emu-rhs>
3166 <emu-rhs a="vfvqnt4z">
3167 <emu-nt id="_ref_140"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
3168 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3169 </emu-rhs>
3170</emu-production>
3171<emu-production name="EnumMemberList" id="prod-EnumMemberList">
3172 <emu-nt><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vflanevg">
3173 <emu-nt id="_ref_141"><a href="#prod-EnumMember">EnumMember</a></emu-nt>
3174 </emu-rhs>
3175 <emu-rhs a="7dn-cbj2">
3176 <emu-nt id="_ref_142"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
3177 <emu-t>,</emu-t>
3178 <emu-nt id="_ref_143"><a href="#prod-EnumMember">EnumMember</a></emu-nt>
3179 </emu-rhs>
3180 <emu-rhs a="qjf2au36">
3181 <emu-nt id="_ref_144"><a href="#prod-EnumMemberList">EnumMemberList</a></emu-nt>
3182 <emu-t>;</emu-t>
3183 <emu-nt id="_ref_145"><a href="#prod-EnumMember">EnumMember</a></emu-nt>
3184 </emu-rhs>
3185</emu-production>
3186<emu-production name="EnumMember" id="prod-EnumMember">
3187 <emu-nt><a href="#prod-EnumMember">EnumMember</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qszik4tm">
3188 <emu-nt id="_ref_146"><a href="#prod-EnumSpreadMember">EnumSpreadMember</a></emu-nt>
3189 </emu-rhs>
3190 <emu-rhs a="htyyapxs">
3191 <emu-nt optional="" id="_ref_147"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3192 <emu-nt id="_ref_148"><a href="#prod-Identifier">Identifier</a></emu-nt>
3193 <emu-nt optional="" id="_ref_149"><a href="#prod-EnumMemberValue">EnumMemberValue</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3194 </emu-rhs>
3195 <emu-rhs a="d-ggnl4a">
3196 <emu-nt optional="" id="_ref_150"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3197 <emu-nt id="_ref_151"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3198 <emu-nt optional="" id="_ref_152"><a href="#prod-EnumMemberValue">EnumMemberValue</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3199 </emu-rhs>
3200</emu-production>
3201<emu-production name="EnumSpreadMember" id="prod-EnumSpreadMember">
3202 <emu-nt><a href="#prod-EnumSpreadMember">EnumSpreadMember</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r9kkoml-">
3203 <emu-t>...</emu-t>
3204 <emu-nt id="_ref_153"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3205 </emu-rhs>
3206</emu-production>
3207<emu-production name="EnumMemberValue" id="prod-EnumMemberValue">
3208 <emu-nt><a href="#prod-EnumMemberValue">EnumMemberValue</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qbuxgevr">
3209 <emu-t>:</emu-t>
3210 <emu-nt id="_ref_154"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3211 </emu-rhs>
3212 <emu-rhs a="ib128nab">
3213 <emu-t>:</emu-t>
3214 <emu-nt id="_ref_155"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt>
3215 </emu-rhs>
3216</emu-production>
3217<emu-production name="AliasStatement" id="prod-AliasStatement">
3218 <emu-nt><a href="#prod-AliasStatement">AliasStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vcp2vkl0">
3219 <emu-t>alias</emu-t>
3220 <emu-nt id="_ref_156"><a href="#prod-Identifier">Identifier</a></emu-nt>
3221 <emu-nt optional="">TemplateParameters<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3222 <emu-t>=</emu-t>
3223 <emu-nt id="_ref_157"><a href="#prod-Expression">Expression</a></emu-nt>
3224 </emu-rhs>
3225 <emu-rhs a="n0rgsga2">
3226 <emu-nt>TemplateParameters</emu-nt>
3227 </emu-rhs>
3228 <emu-rhs a="bedwy-8u">
3229 <emu-t>&lt;</emu-t>
3230 <emu-nt id="_ref_158"><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt>
3231 <emu-t>&gt;</emu-t>
3232 </emu-rhs>
3233</emu-production>
3234<emu-production name="TemplateParameterList" id="prod-TemplateParameterList">
3235 <emu-nt><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ejiqpl9p">
3236 <emu-nt id="_ref_159"><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt>
3237 </emu-rhs>
3238 <emu-rhs a="sxsfhd-n">
3239 <emu-nt id="_ref_160"><a href="#prod-TemplateParameterList">TemplateParameterList</a></emu-nt>
3240 <emu-t>,</emu-t>
3241 <emu-nt id="_ref_161"><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt>
3242 </emu-rhs>
3243</emu-production>
3244<emu-production name="TemplateParameter" id="prod-TemplateParameter">
3245 <emu-nt><a href="#prod-TemplateParameter">TemplateParameter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jbgjjl2d">
3246 <emu-nt id="_ref_162"><a href="#prod-Identifier">Identifier</a></emu-nt>
3247 <emu-nt optional="" id="_ref_163"><a href="#prod-TemplateParameterConstraint">TemplateParameterConstraint</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3248 <emu-nt optional="" id="_ref_164"><a href="#prod-TemplateParameterDefault">TemplateParameterDefault</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3249 </emu-rhs>
3250</emu-production>
3251<emu-production name="TemplateParameterConstraint" id="prod-TemplateParameterConstraint">
3252 <emu-nt><a href="#prod-TemplateParameterConstraint">TemplateParameterConstraint</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gfhzfpr0">
3253 <emu-t>extends</emu-t>
3254 <emu-nt id="_ref_165"><a href="#prod-Expression">Expression</a></emu-nt>
3255 </emu-rhs>
3256</emu-production>
3257<emu-production name="TemplateParameterDefault" id="prod-TemplateParameterDefault">
3258 <emu-nt><a href="#prod-TemplateParameterDefault">TemplateParameterDefault</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a5ipakza">
3259 <emu-t>=</emu-t>
3260 <emu-nt id="_ref_166"><a href="#prod-Expression">Expression</a></emu-nt>
3261 </emu-rhs>
3262</emu-production>
3263<emu-production name="IdentifierList" id="prod-IdentifierList">
3264 <emu-nt><a href="#prod-IdentifierList">IdentifierList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_">
3265 <emu-nt id="_ref_167"><a href="#prod-Identifier">Identifier</a></emu-nt>
3266 </emu-rhs>
3267 <emu-rhs a="btxjxlll">
3268 <emu-nt id="_ref_168"><a href="#prod-IdentifierList">IdentifierList</a></emu-nt>
3269 <emu-t>,</emu-t>
3270 <emu-nt id="_ref_169"><a href="#prod-Identifier">Identifier</a></emu-nt>
3271 </emu-rhs>
3272</emu-production>
3273<emu-production name="NamespaceStatement" id="prod-NamespaceStatement">
3274 <emu-nt><a href="#prod-NamespaceStatement">NamespaceStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lrsdvje0">
3275 <emu-nt optional="" id="_ref_170"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3276 <emu-t>namespace</emu-t>
3277 <emu-nt id="_ref_171"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3278 <emu-t>{</emu-t>
3279 <emu-nt optional="" id="_ref_172"><a href="#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3280 <emu-t>}</emu-t>
3281 </emu-rhs>
3282</emu-production>
3283<emu-production name="OperationSignatureDeclaration" id="prod-OperationSignatureDeclaration">
3284 <emu-nt><a href="#prod-OperationSignatureDeclaration">OperationSignatureDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fv6fbcct">
3285 <emu-t>(</emu-t>
3286 <emu-nt optional="" id="_ref_173"><a href="#prod-ModelPropertyList">ModelPropertyList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3287 <emu-t>)</emu-t>
3288 <emu-t>:</emu-t>
3289 <emu-nt id="_ref_174"><a href="#prod-Expression">Expression</a></emu-nt>
3290 </emu-rhs>
3291</emu-production>
3292<emu-production name="OperationSignatureReference" id="prod-OperationSignatureReference">
3293 <emu-nt><a href="#prod-OperationSignatureReference">OperationSignatureReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jm_bzxxi">
3294 <emu-t>is</emu-t>
3295 <emu-nt id="_ref_175"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3296 </emu-rhs>
3297</emu-production>
3298<emu-production name="OperationSignature" id="prod-OperationSignature">
3299 <emu-nt><a href="#prod-OperationSignature">OperationSignature</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="auwsgpwa">
3300 <emu-nt id="_ref_176"><a href="#prod-OperationSignatureDeclaration">OperationSignatureDeclaration</a></emu-nt>
3301 </emu-rhs>
3302 <emu-rhs a="pffyodoe">
3303 <emu-nt id="_ref_177"><a href="#prod-OperationSignatureReference">OperationSignatureReference</a></emu-nt>
3304 </emu-rhs>
3305</emu-production>
3306<emu-production name="OperationStatement" id="prod-OperationStatement">
3307 <emu-nt><a href="#prod-OperationStatement">OperationStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="actcwu87">
3308 <emu-nt optional="" id="_ref_178"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3309 <emu-t>op</emu-t>
3310 <emu-nt id="_ref_179"><a href="#prod-Identifier">Identifier</a></emu-nt>
3311 <emu-nt optional="" id="_ref_180"><a href="#prod-TemplateArguments">TemplateArguments</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3312 <emu-nt id="_ref_181"><a href="#prod-OperationSignature">OperationSignature</a></emu-nt>
3313 <emu-t>;</emu-t>
3314 </emu-rhs>
3315</emu-production>
3316<emu-production name="Expression" id="prod-Expression">
3317 <emu-nt><a href="#prod-Expression">Expression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="otzlm2nv">
3318 <emu-nt id="_ref_182"><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt>
3319 </emu-rhs>
3320</emu-production>
3321<emu-production name="UnionExpressionOrHigher" id="prod-UnionExpressionOrHigher">
3322 <emu-nt><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="l4bpz882">
3323 <emu-nt id="_ref_183"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt>
3324 </emu-rhs>
3325 <emu-rhs a="oiwllrbb">
3326 <emu-t optional="">|<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3327 <emu-nt id="_ref_184"><a href="#prod-UnionExpressionOrHigher">UnionExpressionOrHigher</a></emu-nt>
3328 <emu-t>|</emu-t>
3329 <emu-nt id="_ref_185"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt>
3330 </emu-rhs>
3331</emu-production>
3332<emu-production name="IntersectionExpressionOrHigher" id="prod-IntersectionExpressionOrHigher">
3333 <emu-nt><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fxst_igc">
3334 <emu-nt id="_ref_186"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt>
3335 </emu-rhs>
3336 <emu-rhs a="cgkcj8yb">
3337 <emu-t optional="">&amp;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3338 <emu-nt id="_ref_187"><a href="#prod-IntersectionExpressionOrHigher">IntersectionExpressionOrHigher</a></emu-nt>
3339 <emu-t>&amp;</emu-t>
3340 <emu-nt id="_ref_188"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt>
3341 </emu-rhs>
3342</emu-production>
3343<emu-production name="ArrayExpressionOrHigher" id="prod-ArrayExpressionOrHigher">
3344 <emu-nt><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jvcvemtw">
3345 <emu-nt id="_ref_189"><a href="#prod-PrimaryExpression">PrimaryExpression</a></emu-nt>
3346 </emu-rhs>
3347 <emu-rhs a="8k-eixnj">
3348 <emu-nt id="_ref_190"><a href="#prod-ArrayExpressionOrHigher">ArrayExpressionOrHigher</a></emu-nt>
3349 <emu-t>[</emu-t>
3350 <emu-t>]</emu-t>
3351 </emu-rhs>
3352</emu-production>
3353<emu-production name="PrimaryExpression" id="prod-PrimaryExpression">
3354 <emu-nt><a href="#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kul-a19e">
3355 <emu-nt id="_ref_191"><a href="#prod-Literal">Literal</a></emu-nt>
3356 </emu-rhs>
3357 <emu-rhs a="mpejatd_">
3358 <emu-nt id="_ref_192"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3359 </emu-rhs>
3360 <emu-rhs a="k5j7cutc">
3361 <emu-nt id="_ref_193"><a href="#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt>
3362 </emu-rhs>
3363 <emu-rhs a="d007fnkw">
3364 <emu-nt id="_ref_194"><a href="#prod-ModelExpression">ModelExpression</a></emu-nt>
3365 </emu-rhs>
3366 <emu-rhs a="rmcinm4a">
3367 <emu-nt id="_ref_195"><a href="#prod-TupleExpression">TupleExpression</a></emu-nt>
3368 </emu-rhs>
3369</emu-production>
3370<emu-production name="Literal" id="prod-Literal">
3371 <emu-nt><a href="#prod-Literal">Literal</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00">
3372 <emu-nt id="_ref_196"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3373 </emu-rhs>
3374 <emu-rhs a="nqjh_sxl">
3375 <emu-nt id="_ref_197"><a href="#prod-BooleanLiteral">BooleanLiteral</a></emu-nt>
3376 </emu-rhs>
3377 <emu-rhs a="pui0b1rt">
3378 <emu-nt id="_ref_198"><a href="#prod-NumericLiteral">NumericLiteral</a></emu-nt>
3379 </emu-rhs>
3380</emu-production>
3381<emu-production name="ReferenceExpression" id="prod-ReferenceExpression">
3382 <emu-nt><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mzr2yu9j">
3383 <emu-nt id="_ref_199"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3384 <emu-nt optional="" id="_ref_200"><a href="#prod-TemplateArguments">TemplateArguments</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3385 </emu-rhs>
3386</emu-production>
3387<emu-production name="ReferenceExpressionList" id="prod-ReferenceExpressionList">
3388 <emu-nt><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mpejatd_">
3389 <emu-nt id="_ref_201"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3390 </emu-rhs>
3391 <emu-rhs a="ry70nwgl">
3392 <emu-nt id="_ref_202"><a href="#prod-ReferenceExpressionList">ReferenceExpressionList</a></emu-nt>
3393 <emu-t>,</emu-t>
3394 <emu-nt id="_ref_203"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3395 </emu-rhs>
3396</emu-production>
3397<emu-production name="IdentifierOrMemberExpression" id="prod-IdentifierOrMemberExpression">
3398 <emu-nt><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_">
3399 <emu-nt id="_ref_204"><a href="#prod-Identifier">Identifier</a></emu-nt>
3400 </emu-rhs>
3401 <emu-rhs a="fagplbkz">
3402 <emu-nt id="_ref_205"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3403 <emu-t>.</emu-t>
3404 <emu-nt id="_ref_206"><a href="#prod-Identifier">Identifier</a></emu-nt>
3405 </emu-rhs>
3406</emu-production>
3407<emu-production name="TemplateArguments" id="prod-TemplateArguments">
3408 <emu-nt><a href="#prod-TemplateArguments">TemplateArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="erulm7dq">
3409 <emu-t>&lt;</emu-t>
3410 <emu-nt id="_ref_207"><a href="#prod-ExpressionList">ExpressionList</a></emu-nt>
3411 <emu-t>&gt;</emu-t>
3412 </emu-rhs>
3413</emu-production>
3414<emu-production name="ProjectionArguments" id="prod-ProjectionArguments">
3415 <emu-nt><a href="#prod-ProjectionArguments">ProjectionArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gq6jlu5e">
3416 <emu-t>(</emu-t>
3417 <emu-nt optional="" id="_ref_208"><a href="#prod-ExpressionList">ExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3418 <emu-t>)</emu-t>
3419 </emu-rhs>
3420</emu-production>
3421<emu-production name="ParenthesizedExpression" id="prod-ParenthesizedExpression">
3422 <emu-nt><a href="#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s6bvnd5v">
3423 <emu-t>(</emu-t>
3424 <emu-nt id="_ref_209"><a href="#prod-Expression">Expression</a></emu-nt>
3425 <emu-t>)</emu-t>
3426 </emu-rhs>
3427</emu-production>
3428<emu-production name="ModelExpression" id="prod-ModelExpression">
3429 <emu-nt><a href="#prod-ModelExpression">ModelExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="p9stvizw">
3430 <emu-t>{</emu-t>
3431 <emu-nt optional="" id="_ref_210"><a href="#prod-ModelBody">ModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3432 <emu-t>}</emu-t>
3433 </emu-rhs>
3434</emu-production>
3435<emu-production name="TupleExpression" id="prod-TupleExpression">
3436 <emu-nt><a href="#prod-TupleExpression">TupleExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lfcd3ro5">
3437 <emu-t>[</emu-t>
3438 <emu-nt optional="" id="_ref_211"><a href="#prod-ExpressionList">ExpressionList</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-production name="ExpressionList" id="prod-ExpressionList">
3443 <emu-nt><a href="#prod-ExpressionList">ExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="l7avubnp">
3444 <emu-nt id="_ref_212"><a href="#prod-Expression">Expression</a></emu-nt>
3445 </emu-rhs>
3446 <emu-rhs a="8cbmyyhk">
3447 <emu-nt id="_ref_213"><a href="#prod-ExpressionList">ExpressionList</a></emu-nt>
3448 <emu-t>,</emu-t>
3449 <emu-nt id="_ref_214"><a href="#prod-Expression">Expression</a></emu-nt>
3450 </emu-rhs>
3451</emu-production>
3452<emu-production name="DecoratorList" id="prod-DecoratorList">
3453 <emu-nt><a href="#prod-DecoratorList">DecoratorList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a6fvhq_2">
3454 <emu-nt optional="" id="_ref_215"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3455 <emu-nt id="_ref_216"><a href="#prod-Decorator">Decorator</a></emu-nt>
3456 </emu-rhs>
3457</emu-production>
3458<emu-production name="Decorator" id="prod-Decorator">
3459 <emu-nt><a href="#prod-Decorator">Decorator</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="p1dbtqtg">
3460 <emu-t>@</emu-t>
3461 <emu-nt id="_ref_217"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3462 <emu-nt optional="" id="_ref_218"><a href="#prod-DecoratorArguments">DecoratorArguments</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3463 </emu-rhs>
3464</emu-production>
3465<emu-production name="DecoratorArguments" id="prod-DecoratorArguments">
3466 <emu-nt><a href="#prod-DecoratorArguments">DecoratorArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gq6jlu5e">
3467 <emu-t>(</emu-t>
3468 <emu-nt optional="" id="_ref_219"><a href="#prod-ExpressionList">ExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3469 <emu-t>)</emu-t>
3470 </emu-rhs>
3471</emu-production>
3472<emu-production name="ProjectionStatement" id="prod-ProjectionStatement">
3473 <emu-nt><a href="#prod-ProjectionStatement">ProjectionStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_13j6y1k">
3474 <emu-t>projection</emu-t>
3475 <emu-nt id="_ref_220"><a href="#prod-ProjectionSelector">ProjectionSelector</a></emu-nt>
3476 <emu-nt id="_ref_221"><a href="#prod-ProjectionDirection">ProjectionDirection</a></emu-nt>
3477 <emu-nt id="_ref_222"><a href="#prod-ProjectionTag">ProjectionTag</a></emu-nt>
3478 <emu-nt optional="" id="_ref_223"><a href="#prod-ProjectionParameters">ProjectionParameters</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3479 <emu-t>{</emu-t>
3480 <emu-nt id="_ref_224"><a href="#prod-ProjectionBody">ProjectionBody</a></emu-nt>
3481 <emu-t>}</emu-t>
3482 </emu-rhs>
3483</emu-production>
3484<emu-production name="ProjectionSelector" id="prod-ProjectionSelector">
3485 <emu-nt><a href="#prod-ProjectionSelector">ProjectionSelector</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-mdwbm0b">
3486 <emu-t>model</emu-t>
3487 </emu-rhs>
3488 <emu-rhs a="71rsbeuh">
3489 <emu-t>interface</emu-t>
3490 </emu-rhs>
3491 <emu-rhs a="ytodrzn0">
3492 <emu-t>op</emu-t>
3493 </emu-rhs>
3494 <emu-rhs a="hgzzvb8j">
3495 <emu-t>union</emu-t>
3496 </emu-rhs>
3497 <emu-rhs a="mpejatd_">
3498 <emu-nt id="_ref_225"><a href="#prod-ReferenceExpression">ReferenceExpression</a></emu-nt>
3499 </emu-rhs>
3500</emu-production>
3501<emu-production name="ProjectionDirection" id="prod-ProjectionDirection">
3502 <emu-nt><a href="#prod-ProjectionDirection">ProjectionDirection</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cys308sz">
3503 <emu-t>to</emu-t>
3504 </emu-rhs>
3505 <emu-rhs a="gbwtlciv">
3506 <emu-t>from</emu-t>
3507 </emu-rhs>
3508</emu-production>
3509<emu-production name="ProjectionTag" id="prod-ProjectionTag">
3510 <emu-nt><a href="#prod-ProjectionTag">ProjectionTag</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="pkshwqzc">
3511 <emu-t>#</emu-t>
3512 <emu-nt id="_ref_226"><a href="#prod-Identifier">Identifier</a></emu-nt>
3513 </emu-rhs>
3514</emu-production>
3515<emu-production name="ProjectionParameters" id="prod-ProjectionParameters">
3516 <emu-nt><a href="#prod-ProjectionParameters">ProjectionParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yyjrc85a">
3517 <emu-t>(</emu-t>
3518 <emu-nt optional="" id="_ref_227"><a href="#prod-IdentifierList">IdentifierList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3519 <emu-t>)</emu-t>
3520 </emu-rhs>
3521</emu-production>
3522<emu-production name="ProjectionBody" id="prod-ProjectionBody">
3523 <emu-nt><a href="#prod-ProjectionBody">ProjectionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bxmgst2s">
3524 <emu-nt id="_ref_228"><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt>
3525 </emu-rhs>
3526</emu-production>
3527<emu-production name="ProjectionStatementList" id="prod-ProjectionStatementList">
3528 <emu-nt><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="8jls0kgx">
3529 <emu-nt id="_ref_229"><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt>
3530 </emu-rhs>
3531 <emu-rhs a="123mhtoq">
3532 <emu-nt id="_ref_230"><a href="#prod-ProjectionStatementList">ProjectionStatementList</a></emu-nt>
3533 <emu-t>;</emu-t>
3534 <emu-nt id="_ref_231"><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt>
3535 </emu-rhs>
3536</emu-production>
3537<emu-production name="ProjectionStatementItem" id="prod-ProjectionStatementItem">
3538 <emu-nt><a href="#prod-ProjectionStatementItem">ProjectionStatementItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ygil0lya">
3539 <emu-nt>ProjectionExpressionStatement</emu-nt>
3540 </emu-rhs>
3541</emu-production>
3542<emu-production name="ProjectionExpression" id="prod-ProjectionExpression">
3543 <emu-nt><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vzsiuzn4">
3544 <emu-nt id="_ref_232"><a href="#prod-ProjectionReturnExpression">ProjectionReturnExpression</a></emu-nt>
3545 </emu-rhs>
3546</emu-production>
3547<emu-production name="ProjectionReturnExpression" id="prod-ProjectionReturnExpression">
3548 <emu-nt><a href="#prod-ProjectionReturnExpression">ProjectionReturnExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="24gnoobj">
3549 <emu-nt id="_ref_233"><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt>
3550 </emu-rhs>
3551 <emu-rhs a="mxa7it1a">
3552 <emu-t>return</emu-t>
3553 <emu-nt id="_ref_234"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3554 </emu-rhs>
3555</emu-production>
3556<emu-production name="ProjectionLogicalOrExpression" id="prod-ProjectionLogicalOrExpression">
3557 <emu-nt><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aawamjyo">
3558 <emu-nt id="_ref_235"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt>
3559 </emu-rhs>
3560 <emu-rhs a="k589waww">
3561 <emu-nt id="_ref_236"><a href="#prod-ProjectionLogicalOrExpression">ProjectionLogicalOrExpression</a></emu-nt>
3562 <emu-t>||</emu-t>
3563 <emu-nt id="_ref_237"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt>
3564 </emu-rhs>
3565</emu-production>
3566<emu-production name="ProjectionLogicalAndExpression" id="prod-ProjectionLogicalAndExpression">
3567 <emu-nt><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nttyzhj4">
3568 <emu-nt id="_ref_238"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3569 </emu-rhs>
3570 <emu-rhs a="evmo1uol">
3571 <emu-nt id="_ref_239"><a href="#prod-ProjectionLogicalAndExpression">ProjectionLogicalAndExpression</a></emu-nt>
3572 <emu-t>&amp;&amp;</emu-t>
3573 <emu-nt id="_ref_240"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3574 </emu-rhs>
3575</emu-production>
3576<emu-production name="ProjectionEqualityExpression" id="prod-ProjectionEqualityExpression">
3577 <emu-nt><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nttyzhj4">
3578 <emu-nt id="_ref_241"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3579 </emu-rhs>
3580 <emu-rhs a="lackn1tw">
3581 <emu-nt id="_ref_242"><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt>
3582 <emu-t>==</emu-t>
3583 <emu-nt id="_ref_243"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3584 </emu-rhs>
3585 <emu-rhs a="mlrnlbcv">
3586 <emu-nt id="_ref_244"><a href="#prod-ProjectionEqualityExpression">ProjectionEqualityExpression</a></emu-nt>
3587 <emu-t>!=</emu-t>
3588 <emu-nt id="_ref_245"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3589 </emu-rhs>
3590</emu-production>
3591<emu-production name="ProjectionRelationalExpression" id="prod-ProjectionRelationalExpression">
3592 <emu-nt><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="flky6l5a">
3593 <emu-nt id="_ref_246"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3594 </emu-rhs>
3595 <emu-rhs a="7lkhh7co">
3596 <emu-nt id="_ref_247"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3597 <emu-t>&lt;</emu-t>
3598 <emu-nt id="_ref_248"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3599 </emu-rhs>
3600 <emu-rhs a="jwbqdqyk">
3601 <emu-nt id="_ref_249"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3602 <emu-t>&gt;</emu-t>
3603 <emu-nt id="_ref_250"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3604 </emu-rhs>
3605 <emu-rhs a="rg5xsl8u">
3606 <emu-nt id="_ref_251"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3607 <emu-t>&lt;=</emu-t>
3608 <emu-nt id="_ref_252"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3609 </emu-rhs>
3610 <emu-rhs a="y-qu2tqb">
3611 <emu-nt id="_ref_253"><a href="#prod-ProjectionRelationalExpression">ProjectionRelationalExpression</a></emu-nt>
3612 <emu-t>&gt;=</emu-t>
3613 <emu-nt id="_ref_254"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3614 </emu-rhs>
3615</emu-production>
3616<emu-production name="ProjectionAdditiveExpression" id="prod-ProjectionAdditiveExpression">
3617 <emu-nt><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eked4n7k">
3618 <emu-nt id="_ref_255"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3619 </emu-rhs>
3620 <emu-rhs a="iiox3k7e">
3621 <emu-nt id="_ref_256"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3622 <emu-t>+</emu-t>
3623 <emu-nt id="_ref_257"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3624 </emu-rhs>
3625 <emu-rhs a="xy3v8nqo">
3626 <emu-nt id="_ref_258"><a href="#prod-ProjectionAdditiveExpression">ProjectionAdditiveExpression</a></emu-nt>
3627 <emu-t>-</emu-t>
3628 <emu-nt id="_ref_259"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3629 </emu-rhs>
3630</emu-production>
3631<emu-production name="ProjectionMultiplicativeExpression" id="prod-ProjectionMultiplicativeExpression">
3632 <emu-nt><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eosbpz0i">
3633 <emu-nt id="_ref_260"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3634 </emu-rhs>
3635 <emu-rhs a="oklvxhw2">
3636 <emu-nt id="_ref_261"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3637 <emu-t>*</emu-t>
3638 <emu-nt id="_ref_262"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3639 </emu-rhs>
3640 <emu-rhs a="vmdvvwy0">
3641 <emu-nt id="_ref_263"><a href="#prod-ProjectionMultiplicativeExpression">ProjectionMultiplicativeExpression</a></emu-nt>
3642 <emu-t>/</emu-t>
3643 <emu-nt id="_ref_264"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3644 </emu-rhs>
3645</emu-production>
3646<emu-production name="ProjectionUnaryExpression" id="prod-ProjectionUnaryExpression">
3647 <emu-nt><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="y0pnlb1i">
3648 <emu-nt id="_ref_265"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3649 </emu-rhs>
3650 <emu-rhs a="xbyln6wd">
3651 <emu-t>!</emu-t>
3652 <emu-nt id="_ref_266"><a href="#prod-ProjectionUnaryExpression">ProjectionUnaryExpression</a></emu-nt>
3653 </emu-rhs>
3654</emu-production>
3655<emu-production name="ProjectionCallExpression" id="prod-ProjectionCallExpression">
3656 <emu-nt><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bovlf96p">
3657 <emu-nt id="_ref_267"><a href="#prod-ProjectionDecoratorReferenceExpression">ProjectionDecoratorReferenceExpression</a></emu-nt>
3658 </emu-rhs>
3659 <emu-rhs a="dskpubvk">
3660 <emu-nt id="_ref_268"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3661 <emu-nt id="_ref_269"><a href="#prod-ProjectionCallArguments">ProjectionCallArguments</a></emu-nt>
3662 </emu-rhs>
3663 <emu-rhs a="mlqh18ki">
3664 <emu-nt id="_ref_270"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3665 <emu-t>.</emu-t>
3666 <emu-nt id="_ref_271"><a href="#prod-Identifier">Identifier</a></emu-nt>
3667 </emu-rhs>
3668 <emu-rhs a="o5cqmytw">
3669 <emu-nt id="_ref_272"><a href="#prod-ProjectionCallExpression">ProjectionCallExpression</a></emu-nt>
3670 <emu-t>::</emu-t>
3671 <emu-nt id="_ref_273"><a href="#prod-Identifier">Identifier</a></emu-nt>
3672 </emu-rhs>
3673</emu-production>
3674<emu-production name="ProjectionCallArguments" id="prod-ProjectionCallArguments">
3675 <emu-nt><a href="#prod-ProjectionCallArguments">ProjectionCallArguments</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j4chh_gn">
3676 <emu-t>(</emu-t>
3677 <emu-nt optional="" id="_ref_274"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3678 <emu-t>)</emu-t>
3679 </emu-rhs>
3680</emu-production>
3681<emu-production name="ProjectionDecoratorReferenceExpression" id="prod-ProjectionDecoratorReferenceExpression">
3682 <emu-nt><a href="#prod-ProjectionDecoratorReferenceExpression">ProjectionDecoratorReferenceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="upl3vrmk">
3683 <emu-nt id="_ref_275"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt>
3684 </emu-rhs>
3685 <emu-rhs a="ifcyd-aq">
3686 <emu-t>@</emu-t>
3687 <emu-nt id="_ref_276"><a href="#prod-IdentifierOrMemberExpression">IdentifierOrMemberExpression</a></emu-nt>
3688 </emu-rhs>
3689</emu-production>
3690<emu-production name="ProjectionMemberExpression" id="prod-ProjectionMemberExpression">
3691 <emu-nt><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0yuqksdg">
3692 <emu-nt id="_ref_277"><a href="#prod-ProjectionPrimaryExpression">ProjectionPrimaryExpression</a></emu-nt>
3693 </emu-rhs>
3694 <emu-rhs a="jew6aiq_">
3695 <emu-nt id="_ref_278"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt>
3696 <emu-t>.</emu-t>
3697 <emu-nt id="_ref_279"><a href="#prod-Identifier">Identifier</a></emu-nt>
3698 </emu-rhs>
3699 <emu-rhs a="rdfgqhl2">
3700 <emu-nt id="_ref_280"><a href="#prod-ProjectionMemberExpression">ProjectionMemberExpression</a></emu-nt>
3701 <emu-t>::</emu-t>
3702 <emu-nt id="_ref_281"><a href="#prod-Identifier">Identifier</a></emu-nt>
3703 </emu-rhs>
3704</emu-production>
3705<emu-production name="ProjectionPrimaryExpression" id="prod-ProjectionPrimaryExpression">
3706 <emu-nt><a href="#prod-ProjectionPrimaryExpression">ProjectionPrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gb-biqvs">
3707 <emu-t>self</emu-t>
3708 </emu-rhs>
3709 <emu-rhs a="bras6mo_">
3710 <emu-nt id="_ref_282"><a href="#prod-Identifier">Identifier</a></emu-nt>
3711 </emu-rhs>
3712 <emu-rhs a="cjpglqhg">
3713 <emu-nt id="_ref_283"><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt>
3714 </emu-rhs>
3715 <emu-rhs a="kwuqjwk9">
3716 <emu-nt id="_ref_284"><a href="#prod-ProjectionLambdaExpression">ProjectionLambdaExpression</a></emu-nt>
3717 </emu-rhs>
3718 <emu-rhs a="kul-a19e">
3719 <emu-nt id="_ref_285"><a href="#prod-Literal">Literal</a></emu-nt>
3720 </emu-rhs>
3721 <emu-rhs a="pmeanrkf">
3722 <emu-nt id="_ref_286"><a href="#prod-ProjectionModelExpression">ProjectionModelExpression</a></emu-nt>
3723 </emu-rhs>
3724 <emu-rhs a="0ehfrlsm">
3725 <emu-nt id="_ref_287"><a href="#prod-ProjectionTupleExpression">ProjectionTupleExpression</a></emu-nt>
3726 </emu-rhs>
3727 <emu-rhs a="ult0-wp7">
3728 <emu-nt id="_ref_288"><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt>
3729 </emu-rhs>
3730</emu-production>
3731<emu-production name="CoverProjectionParenthesizedExpressionAndLambdaParameterList" id="prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">
3732 <emu-nt><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="b22wugnz">
3733 <emu-t>(</emu-t>
3734 <emu-nt id="_ref_289"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3735 <emu-t>)</emu-t>
3736 </emu-rhs>
3737</emu-production>
3738<emu-production name="ProjectionExpressionList" id="prod-ProjectionExpressionList">
3739 <emu-nt><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="emksbnr7">
3740 <emu-nt id="_ref_290"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3741 </emu-rhs>
3742 <emu-rhs a="if8za0tg">
3743 <emu-nt id="_ref_291"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3744 <emu-t>,</emu-t>
3745 <emu-nt id="_ref_292"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3746 </emu-rhs>
3747</emu-production>
3748<emu-production name="ProjectionIfExpression" id="prod-ProjectionIfExpression">
3749 <emu-nt><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4wt0s7kz">
3750 <emu-t>if</emu-t>
3751 <emu-nt id="_ref_293"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3752 <emu-nt>BlockExpression</emu-nt>
3753 </emu-rhs>
3754 <emu-rhs a="uh-blucs">
3755 <emu-t>if</emu-t>
3756 <emu-nt id="_ref_294"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3757 <emu-nt>BlockExpression</emu-nt>
3758 <emu-t>else</emu-t>
3759 <emu-nt id="_ref_295"><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt>
3760 </emu-rhs>
3761 <emu-rhs a="o_gymffi">
3762 <emu-t>if</emu-t>
3763 <emu-nt id="_ref_296"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3764 <emu-nt>BlockExpression</emu-nt>
3765 <emu-t>else</emu-t>
3766 <emu-nt id="_ref_297"><a href="#prod-ProjectionIfExpression">ProjectionIfExpression</a></emu-nt>
3767 </emu-rhs>
3768</emu-production>
3769<emu-production name="ProjectionModelExpression" id="prod-ProjectionModelExpression">
3770 <emu-nt><a href="#prod-ProjectionModelExpression">ProjectionModelExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uni6ofws">
3771 <emu-t>{</emu-t>
3772 <emu-nt optional="" id="_ref_298"><a href="#prod-ProjectionModelBody">ProjectionModelBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3773 <emu-t>}</emu-t>
3774 </emu-rhs>
3775</emu-production>
3776<emu-production name="ProjectionModelBody" id="prod-ProjectionModelBody">
3777 <emu-nt><a href="#prod-ProjectionModelBody">ProjectionModelBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rtfwbkzz">
3778 <emu-nt id="_ref_299"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3779 <emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3780 </emu-rhs>
3781 <emu-rhs a="foktbtgh">
3782 <emu-nt id="_ref_300"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3783 <emu-t optional="">;<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3784 </emu-rhs>
3785</emu-production>
3786<emu-production name="ProjectionModelPropertyList" id="prod-ProjectionModelPropertyList">
3787 <emu-nt><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qnv19o8r">
3788 <emu-nt id="_ref_301"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt>
3789 </emu-rhs>
3790 <emu-rhs a="k06km7_w">
3791 <emu-nt id="_ref_302"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3792 <emu-t>,</emu-t>
3793 <emu-nt id="_ref_303"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt>
3794 </emu-rhs>
3795 <emu-rhs a="xtycdbqj">
3796 <emu-nt id="_ref_304"><a href="#prod-ProjectionModelPropertyList">ProjectionModelPropertyList</a></emu-nt>
3797 <emu-t>;</emu-t>
3798 <emu-nt id="_ref_305"><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt>
3799 </emu-rhs>
3800</emu-production>
3801<emu-production name="ProjectionModelProperty" id="prod-ProjectionModelProperty">
3802 <emu-nt><a href="#prod-ProjectionModelProperty">ProjectionModelProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="noc7fhyz">
3803 <emu-nt id="_ref_306"><a href="#prod-ProjectionModelSpreadProperty">ProjectionModelSpreadProperty</a></emu-nt>
3804 </emu-rhs>
3805 <emu-rhs a="6zpn0h3k">
3806 <emu-nt optional="" id="_ref_307"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3807 <emu-nt id="_ref_308"><a href="#prod-Identifier">Identifier</a></emu-nt>
3808 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3809 <emu-t>:</emu-t>
3810 <emu-nt id="_ref_309"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3811 </emu-rhs>
3812 <emu-rhs a="oncm7e4f">
3813 <emu-nt optional="" id="_ref_310"><a href="#prod-DecoratorList">DecoratorList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3814 <emu-nt id="_ref_311"><a href="#prod-StringLiteral">StringLiteral</a></emu-nt>
3815 <emu-t optional="">?<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
3816 <emu-t>:</emu-t>
3817 <emu-nt id="_ref_312"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3818 </emu-rhs>
3819</emu-production>
3820<emu-production name="ProjectionModelSpreadProperty" id="prod-ProjectionModelSpreadProperty">
3821 <emu-nt><a href="#prod-ProjectionModelSpreadProperty">ProjectionModelSpreadProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="npvsjwgu">
3822 <emu-t>...</emu-t>
3823 <emu-nt id="_ref_313"><a href="#prod-ProjectionExpression">ProjectionExpression</a></emu-nt>
3824 </emu-rhs>
3825</emu-production>
3826<emu-production name="ProjectionTupleExpression" id="prod-ProjectionTupleExpression">
3827 <emu-nt><a href="#prod-ProjectionTupleExpression">ProjectionTupleExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zhtv_ku5">
3828 <emu-t>[</emu-t>
3829 <emu-nt optional="" id="_ref_314"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3830 <emu-t>]</emu-t>
3831 </emu-rhs>
3832</emu-production>
3833<emu-production name="ProjectionLambdaExpression" id="prod-ProjectionLambdaExpression">
3834 <emu-nt><a href="#prod-ProjectionLambdaExpression">ProjectionLambdaExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wjv4b-0b">
3835 <emu-nt id="_ref_315"><a href="#prod-CoverProjectionParenthesizedExpressionAndLambdaParameterList">CoverProjectionParenthesizedExpressionAndLambdaParameterList</a></emu-nt>
3836 <emu-t>=&gt;</emu-t>
3837 <emu-nt id="_ref_316"><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt>
3838 </emu-rhs>
3839</emu-production>
3840<emu-production name="ProjectionBlockExpression" id="prod-ProjectionBlockExpression">
3841 <emu-nt><a href="#prod-ProjectionBlockExpression">ProjectionBlockExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qsr0aizg">
3842 <emu-t>{</emu-t>
3843 <emu-nt id="_ref_317"><a href="#prod-ProjectionExpressionList">ProjectionExpressionList</a></emu-nt>
3844 <emu-t>}</emu-t>
3845 </emu-rhs>
3846</emu-production>
3847<emu-production name="LambdaParameters" id="prod-LambdaParameters">
3848 <emu-nt><a href="#prod-LambdaParameters">LambdaParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yyjrc85a">
3849 <emu-t>(</emu-t>
3850 <emu-nt optional="" id="_ref_318"><a href="#prod-IdentifierList">IdentifierList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
3851 <emu-t>)</emu-t>
3852 </emu-rhs>
3853</emu-production>
3854</emu-grammar>
3855</emu-clause>
3856</div></body>