310 lines
4.5 KiB
Plaintext
310 lines
4.5 KiB
Plaintext
|
|
# Copyright 2017 The Chromium Authors
|
||
|
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
|
# found in the LICENSE file.
|
||
|
|
|
||
|
|
# Elementary building blocks:
|
||
|
|
|
||
|
|
# Empty
|
||
|
|
" "
|
||
|
|
|
||
|
|
# Tokens
|
||
|
|
"("
|
||
|
|
")"
|
||
|
|
"["
|
||
|
|
"]"
|
||
|
|
"{"
|
||
|
|
"}"
|
||
|
|
":"
|
||
|
|
";"
|
||
|
|
"."
|
||
|
|
"..."
|
||
|
|
"?"
|
||
|
|
"++"
|
||
|
|
"--"
|
||
|
|
"=>"
|
||
|
|
"!"
|
||
|
|
"="
|
||
|
|
"|="
|
||
|
|
"^="
|
||
|
|
"&="
|
||
|
|
"<<="
|
||
|
|
">>="
|
||
|
|
">>>="
|
||
|
|
"+="
|
||
|
|
"-="
|
||
|
|
"*="
|
||
|
|
"/="
|
||
|
|
"%="
|
||
|
|
"**="
|
||
|
|
","
|
||
|
|
"||"
|
||
|
|
"&&"
|
||
|
|
"|"
|
||
|
|
"^"
|
||
|
|
"&"
|
||
|
|
"<<"
|
||
|
|
">>"
|
||
|
|
">>>"
|
||
|
|
"+"
|
||
|
|
"-"
|
||
|
|
"*"
|
||
|
|
"/"
|
||
|
|
"%"
|
||
|
|
"**"
|
||
|
|
"=="
|
||
|
|
"!="
|
||
|
|
"==="
|
||
|
|
"!=="
|
||
|
|
"<"
|
||
|
|
">"
|
||
|
|
"<="
|
||
|
|
">="
|
||
|
|
"!"
|
||
|
|
"~"
|
||
|
|
"#"
|
||
|
|
".#"
|
||
|
|
|
||
|
|
# Keywords, contextual keywords, literals, reserved words.
|
||
|
|
"__proto__"
|
||
|
|
"anonymous"
|
||
|
|
"arguments"
|
||
|
|
"as"
|
||
|
|
"async"
|
||
|
|
"await"
|
||
|
|
"break"
|
||
|
|
"case"
|
||
|
|
"catch"
|
||
|
|
"class"
|
||
|
|
"const"
|
||
|
|
"constructor"
|
||
|
|
"continue"
|
||
|
|
"debugger"
|
||
|
|
"default"
|
||
|
|
"delete"
|
||
|
|
"do"
|
||
|
|
"else"
|
||
|
|
"enum"
|
||
|
|
"eval"
|
||
|
|
"export"
|
||
|
|
"extends"
|
||
|
|
"false"
|
||
|
|
"finally"
|
||
|
|
"for"
|
||
|
|
"from"
|
||
|
|
"function"
|
||
|
|
"get"
|
||
|
|
"if"
|
||
|
|
"import"
|
||
|
|
"in"
|
||
|
|
"instanceof"
|
||
|
|
"let"
|
||
|
|
"name"
|
||
|
|
"new"
|
||
|
|
"null"
|
||
|
|
"of"
|
||
|
|
"prototype"
|
||
|
|
"return"
|
||
|
|
"sent"
|
||
|
|
"set"
|
||
|
|
"static"
|
||
|
|
"super"
|
||
|
|
"switch"
|
||
|
|
"target"
|
||
|
|
"this"
|
||
|
|
"throw"
|
||
|
|
"true"
|
||
|
|
"try"
|
||
|
|
"typeof"
|
||
|
|
"undefined"
|
||
|
|
"var"
|
||
|
|
"void"
|
||
|
|
"while"
|
||
|
|
"with"
|
||
|
|
|
||
|
|
# TODO(marja): Add names of known classes.
|
||
|
|
|
||
|
|
# Separators
|
||
|
|
"\n"
|
||
|
|
"; "
|
||
|
|
$0 "\n"
|
||
|
|
$0 "; "
|
||
|
|
|
||
|
|
$0 "," $1
|
||
|
|
"(" $0 ")"
|
||
|
|
|
||
|
|
# Identifiers
|
||
|
|
"foo"
|
||
|
|
"bar"
|
||
|
|
"a"
|
||
|
|
"b"
|
||
|
|
"c"
|
||
|
|
|
||
|
|
# Other literals
|
||
|
|
"0"
|
||
|
|
"0.0"
|
||
|
|
|
||
|
|
# TODO(marja): Add strings and numbers! And quotes.
|
||
|
|
|
||
|
|
# Other meaningful words from the spec
|
||
|
|
"new.target"
|
||
|
|
|
||
|
|
# More complicated building blocks
|
||
|
|
|
||
|
|
# Block, object, or binding pattern
|
||
|
|
"{" $0 "}"
|
||
|
|
"{" $0 ": " $1 "}"
|
||
|
|
|
||
|
|
# Array or array binding pattern
|
||
|
|
"[" $0 "]"
|
||
|
|
|
||
|
|
# Rest element or rest parameter
|
||
|
|
"..."
|
||
|
|
"..." $0
|
||
|
|
|
||
|
|
# Variable declarations
|
||
|
|
"let" $0 "=" $1 ";"
|
||
|
|
"const " $0 "=" $1 ";"
|
||
|
|
"var" $0 "=" $1 ";"
|
||
|
|
|
||
|
|
# Return statements
|
||
|
|
"return" $0
|
||
|
|
"return" $0 ";"
|
||
|
|
|
||
|
|
# If statements
|
||
|
|
"if (" $0 ")" $1
|
||
|
|
"if (" $0 ") {" $1 "}"
|
||
|
|
"if (" $0 ") {" $1 "} else {" $2 "}"
|
||
|
|
"if (" $0 ")" $1 "else" $2
|
||
|
|
|
||
|
|
# Iteration statements
|
||
|
|
"do" $0 "while (" $1 ");"
|
||
|
|
"for (" $0 ")" $1
|
||
|
|
"for (" $0 ") {" $1 " }"
|
||
|
|
"for (" $0 "in" $1 ")" $2
|
||
|
|
"for (" $0 "in" $1 ") {" $2 "}"
|
||
|
|
"for (" $0 "of" $1 ")" $2
|
||
|
|
"for (" $0 "of" $1 ") {" $2 "}"
|
||
|
|
"for (" $0 ";" $1 ";" $2 ")" $3
|
||
|
|
"for (" $0 ";" $1 ";" $2 ") {" $3 "}"
|
||
|
|
"for await (" $0 ")" $1
|
||
|
|
"for await (" $0 ") {" $1 " }"
|
||
|
|
"for await (" $0 "in" $1 ")" $2
|
||
|
|
"for await (" $0 "in" $1 ") {" $2 "}"
|
||
|
|
"for await (" $0 "of" $1 ")" $2
|
||
|
|
"for await (" $0 "of" $1 ") {" $2 "}"
|
||
|
|
"for await (" $0 ";" $1 ";" $2 ")" $3
|
||
|
|
"for await (" $0 ";" $1 ";" $2 ") {" $3 "}"
|
||
|
|
"while (" $0 ")" $1
|
||
|
|
"while (" $0 ") {" $1 "}"
|
||
|
|
"continue"
|
||
|
|
"continue;"
|
||
|
|
"continue" $0
|
||
|
|
"break"
|
||
|
|
"break;"
|
||
|
|
"break" $0
|
||
|
|
|
||
|
|
# With statements
|
||
|
|
"with (" $0 ")" $1
|
||
|
|
"with (" $0 ") {" $1 "}"
|
||
|
|
|
||
|
|
# Switch statements
|
||
|
|
"switch (" $0 ")" $1
|
||
|
|
"switch (" $0 ") {" $1 "}"
|
||
|
|
"case" $0 ": " $1
|
||
|
|
"case" $0 ": {" $1 "}"
|
||
|
|
"default :" $0
|
||
|
|
|
||
|
|
# Try-catch statements
|
||
|
|
"try" $0 "catch (" $1 ")" $2
|
||
|
|
"try {" $0 "} catch (" $1 ") {" $2 "}"
|
||
|
|
"try" $0 "finally (" $1 ")" $2
|
||
|
|
"try {" $0 "} finally (" $1 ") {" $2 "}"
|
||
|
|
"try" $0 "catch (" $1 ")" $2 "finally" $3
|
||
|
|
"try {" $0 "} catch (" $1 ") {" $2 "} finally {" $3 "}"
|
||
|
|
|
||
|
|
# Functions and arrow functions
|
||
|
|
"function" $0 "(" $1 ") {" $2 "}"
|
||
|
|
"function" "(" $0 ") {" $1 "}"
|
||
|
|
$0 "=>" $1
|
||
|
|
$0 "=> {" $1 "}"
|
||
|
|
"(" $0 ") => {" $1 "}"
|
||
|
|
"(" $0 ") =>" $1
|
||
|
|
|
||
|
|
# Strict functions and arrow functions
|
||
|
|
"function" $0 "(" $1 ") { 'use strict';" $2 "}"
|
||
|
|
"function" "(" $0 ") { 'use strict';" $1 "}"
|
||
|
|
$0 "=> { 'use strict';" $1 "}"
|
||
|
|
"(" $0 ") => { 'use strict'; " $1 "}"
|
||
|
|
|
||
|
|
# Methods
|
||
|
|
$0 "(" $1 ") {" $1 "}"
|
||
|
|
"get" $0 "(" $1 ") {" $1 "}"
|
||
|
|
"set" $0 "(" $1 ") {" $1 "}"
|
||
|
|
"static" $0 "(" $1 ") {" $1 "}"
|
||
|
|
"static get" $0 "(" $1 ") {" $1 "}"
|
||
|
|
"static set" $0 "(" $1 ") {" $1 "}"
|
||
|
|
|
||
|
|
# Generators
|
||
|
|
"*" $0 "(" $1 ") {" $2 "}"
|
||
|
|
"function *" $0 "(" $1 ") {" $2 "}"
|
||
|
|
"function * (" $1 ") {" $2 "}"
|
||
|
|
"yield" $0
|
||
|
|
"yield *" $0
|
||
|
|
|
||
|
|
# Strict generators
|
||
|
|
"function *" $0 "(" $1 ") {'use strict'; " $2 "}"
|
||
|
|
"function * (" $1 ") { 'use strict'; " $2 "}"
|
||
|
|
|
||
|
|
# Classes
|
||
|
|
"class" $0 "{" $1 "}"
|
||
|
|
"class" $0 "extends" $1 "{" $2 "}"
|
||
|
|
|
||
|
|
# Async functions, async methods, async arrow functions
|
||
|
|
"async function" $0 "(" $1 ") {" $2 "}"
|
||
|
|
"async function" "(" $0 ") {" $1 "}"
|
||
|
|
"async" $0 "(" $1 ") {" $2 "}"
|
||
|
|
"async" $0 "=>" $1
|
||
|
|
"async" $0 "=> {" $1 "}"
|
||
|
|
"async(" $0 ") => {" $1 "}"
|
||
|
|
"async(" $0 ") =>" $1
|
||
|
|
"await" $0
|
||
|
|
|
||
|
|
# Strict async functions.
|
||
|
|
"async function" $0 "(" $1 ") { 'use strict'; " $2 "}"
|
||
|
|
"async function" "(" $0 ") { 'use strict'; " $1 "}"
|
||
|
|
"async" $0 "(" $1 ") { 'use strict'; " $2 "}"
|
||
|
|
"async" $0 "=> { 'use strict'; " $1 "}"
|
||
|
|
"async(" $0 ") => { 'use strict';" $1 "}"
|
||
|
|
|
||
|
|
# Call expressions
|
||
|
|
$0 "[" $1 "]"
|
||
|
|
$0 "(" $1 ")"
|
||
|
|
|
||
|
|
# Template literals
|
||
|
|
"`foo`"
|
||
|
|
$0 "`foo`"
|
||
|
|
# TODO(marja): add more
|
||
|
|
|
||
|
|
# Strict directive
|
||
|
|
"'use strict';"
|
||
|
|
|
||
|
|
# Regexps
|
||
|
|
"/foo/"
|
||
|
|
# TODO(marja): add more
|
||
|
|
|
||
|
|
# Conditional expression
|
||
|
|
$0 "?" $1 ":" $2
|
||
|
|
$0 "?" $1 ":" $2 ";"
|
||
|
|
|
||
|
|
# Assignment expressions
|
||
|
|
$0 "=" $1
|
||
|
|
$0 "=" $1 ";"
|
||
|
|
|
||
|
|
# Import / export (for modules)
|
||
|
|
"import" $0 ";"
|
||
|
|
"export" $0 ";"
|
||
|
|
|
||
|
|
# Misc.
|
||
|
|
"eval('');"
|
||
|
|
|