Remove repetition from language spec descriptions
This commit is contained in:
parent
38ad248a53
commit
8134b64d00
14 changed files with 250 additions and 71 deletions
|
|
@ -1,10 +1,13 @@
|
|||
==========================================
|
||||
parses multiple statements
|
||||
multiple statements
|
||||
==========================================
|
||||
|
||||
var x = {}, z, i = 0;
|
||||
firstFunction(x)
|
||||
secondFunction(x);
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(var_declaration
|
||||
(var_assignment (identifier) (object))
|
||||
|
|
@ -14,32 +17,39 @@ secondFunction(x);
|
|||
(expression_statement (function_call (identifier) (identifier))))
|
||||
|
||||
==========================================
|
||||
js parses if statements
|
||||
if statements
|
||||
==========================================
|
||||
|
||||
if (isReady()) {
|
||||
console.log(theData)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(if_statement (function_call (identifier))
|
||||
(statement_block (expression_statement (function_call (property_access (identifier) (identifier)) (identifier)))))
|
||||
|
||||
==========================================
|
||||
parses if-else statements
|
||||
if-else statements
|
||||
==========================================
|
||||
|
||||
if (theCondition) {
|
||||
firstFunction();
|
||||
} else {
|
||||
secondFunction();
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(if_statement
|
||||
(identifier)
|
||||
(statement_block (expression_statement (function_call (identifier))))
|
||||
(statement_block (expression_statement (function_call (identifier)))))
|
||||
|
||||
==================================================
|
||||
parses if-else statements with multiple conditions
|
||||
if-else statements with multiple conditions
|
||||
==================================================
|
||||
|
||||
if (firstValue) {
|
||||
firstFunction();
|
||||
} else if (secondValue)
|
||||
|
|
@ -47,7 +57,9 @@ if (firstValue) {
|
|||
else {
|
||||
thirdFunction();
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(if_statement (identifier)
|
||||
(statement_block (expression_statement (function_call (identifier))))
|
||||
(if_statement (identifier)
|
||||
|
|
@ -55,12 +67,15 @@ else {
|
|||
(statement_block (expression_statement (function_call (identifier))))))
|
||||
|
||||
==========================================
|
||||
parses for loops
|
||||
for loops
|
||||
==========================================
|
||||
|
||||
for (var i = 1; someCondition(i); i = next()) {
|
||||
doSomething();
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(for_statement
|
||||
(var_declaration (var_assignment (identifier) (number)))
|
||||
(expression_statement (function_call (identifier) (identifier)))
|
||||
|
|
@ -68,13 +83,16 @@ for (var i = 1; someCondition(i); i = next()) {
|
|||
(statement_block (expression_statement (function_call (identifier)))))
|
||||
|
||||
==========================================
|
||||
parses for-in loops
|
||||
for-in loops
|
||||
==========================================
|
||||
|
||||
for (var key in someObject)
|
||||
doSomething();
|
||||
for (key in someObject)
|
||||
doSomethingElse();
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(for_in_statement
|
||||
(identifier) (identifier)
|
||||
|
|
@ -84,19 +102,22 @@ for (key in someObject)
|
|||
(expression_statement (function_call (identifier)))))
|
||||
|
||||
==========================================
|
||||
parses while loops
|
||||
while loops
|
||||
==========================================
|
||||
|
||||
while (someCondition(i)) {
|
||||
doSomething();
|
||||
}
|
||||
|
||||
---
|
||||
(while_statement
|
||||
(function_call (identifier) (identifier))
|
||||
(statement_block (expression_statement (function_call (identifier)))))
|
||||
|
||||
==========================================
|
||||
parses try/catch statements
|
||||
try/catch statements
|
||||
==========================================
|
||||
|
||||
try {
|
||||
doSomething();
|
||||
} catch (e) {
|
||||
|
|
@ -108,7 +129,9 @@ try {
|
|||
} finally {
|
||||
logError();
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(try_statement
|
||||
(statement_block (expression_statement (function_call (identifier))))
|
||||
|
|
@ -120,26 +143,33 @@ try {
|
|||
(statement_block (expression_statement (function_call (identifier)))))))
|
||||
|
||||
===========================================
|
||||
parses throw statements
|
||||
throw statements
|
||||
===========================================
|
||||
|
||||
throw new Error("wtf");
|
||||
|
||||
---
|
||||
|
||||
(throw_statement (constructor_call (function_call (identifier) (string))))
|
||||
|
||||
===========================================
|
||||
parses indented code after blocks
|
||||
indented code after blocks
|
||||
===========================================
|
||||
|
||||
function x() {}
|
||||
return z;
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(expression_statement
|
||||
(function_expression (identifier) (formal_parameters) (statement_block)))
|
||||
(return_statement (identifier)))
|
||||
|
||||
===========================================
|
||||
parses switch statements
|
||||
switch statements
|
||||
===========================================
|
||||
|
||||
switch(x) {
|
||||
case "hello":
|
||||
print("one");
|
||||
|
|
@ -150,7 +180,9 @@ switch(x) {
|
|||
default:
|
||||
print("three");
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(switch_statement (identifier)
|
||||
(switch_case
|
||||
(string)
|
||||
|
|
|
|||
|
|
@ -1,19 +1,25 @@
|
|||
==========================================
|
||||
recovers from errors in function calls
|
||||
errors in function calls
|
||||
==========================================
|
||||
|
||||
stuff(|||);
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier) (ERROR '|')))
|
||||
|
||||
==========================================
|
||||
recovers from errors in if statements
|
||||
errors in if statements
|
||||
==========================================
|
||||
|
||||
stuff();
|
||||
if (*nonsense*) {
|
||||
*more-nonsense*;
|
||||
}
|
||||
moreStuff();
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(expression_statement (function_call (identifier)))
|
||||
(if_statement (ERROR '*')
|
||||
|
|
|
|||
|
|
@ -1,36 +1,48 @@
|
|||
==========================================
|
||||
parses regexes
|
||||
regexes
|
||||
==========================================
|
||||
|
||||
theFunction(/regex1/, /regex2/g);
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier)
|
||||
(regex) (regex)))
|
||||
|
||||
==========================================
|
||||
parses numbers
|
||||
numbers
|
||||
==========================================
|
||||
|
||||
theFunction(100.0, 200);
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier)
|
||||
(number) (number)))
|
||||
|
||||
==========================================
|
||||
parses strings
|
||||
strings
|
||||
==========================================
|
||||
|
||||
theFunction('', "", 'single-quoted-string', "double-quoted-string");
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier)
|
||||
(string) (string) (string) (string)))
|
||||
|
||||
==========================================
|
||||
parses function expressions
|
||||
function expressions
|
||||
==========================================
|
||||
|
||||
var x = {
|
||||
theMethod: function(argA, argB) {
|
||||
var x = argA;
|
||||
}
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(var_declaration (var_assignment
|
||||
(identifier)
|
||||
(object (identifier) (function_expression
|
||||
|
|
@ -39,8 +51,9 @@ var x = {
|
|||
(var_declaration (var_assignment (identifier) (identifier))))))))
|
||||
|
||||
==========================================
|
||||
parses comments
|
||||
comments
|
||||
==========================================
|
||||
|
||||
// this is the beginning of the script.
|
||||
// here we go.
|
||||
var thing = {
|
||||
|
|
@ -53,6 +66,7 @@ var thing = {
|
|||
doStuff();
|
||||
}
|
||||
};
|
||||
|
||||
---
|
||||
(comment)
|
||||
(comment)
|
||||
|
|
@ -68,9 +82,12 @@ var thing = {
|
|||
(expression_statement (function_call (identifier))))))))
|
||||
|
||||
==========================================
|
||||
parses comments within expressions
|
||||
comments within expressions
|
||||
==========================================
|
||||
|
||||
y // comment
|
||||
* z;
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (math_op (expression (identifier) (comment)) (identifier)))
|
||||
|
|
|
|||
|
|
@ -1,17 +1,23 @@
|
|||
==========================================
|
||||
parses function calls
|
||||
function calls
|
||||
==========================================
|
||||
|
||||
x.theMethod(5, 6);
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call
|
||||
(property_access (identifier) (identifier))
|
||||
(number) (number)))
|
||||
|
||||
==========================================
|
||||
parses constructor calls
|
||||
constructor calls
|
||||
==========================================
|
||||
|
||||
var x = new Node(5, new Node(3, null));
|
||||
|
||||
---
|
||||
|
||||
(var_declaration (var_assignment
|
||||
(identifier)
|
||||
(constructor_call (function_call (identifier)
|
||||
|
|
@ -21,11 +27,14 @@ var x = new Node(5, new Node(3, null));
|
|||
(null)))))))
|
||||
|
||||
==========================================
|
||||
parses property access with dot notation
|
||||
property access with dot notation
|
||||
==========================================
|
||||
|
||||
object.property = "the-value";
|
||||
print(object.property);
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(expression_statement (assignment
|
||||
(property_access (identifier) (identifier))
|
||||
|
|
@ -35,22 +44,27 @@ print(object.property);
|
|||
(property_access (identifier) (identifier)))))
|
||||
|
||||
==========================================
|
||||
parses property access across lines
|
||||
property access across lines
|
||||
==========================================
|
||||
|
||||
object
|
||||
.someProperty
|
||||
.otherProperty
|
||||
|
||||
---
|
||||
|
||||
(expression_statement
|
||||
(property_access
|
||||
(property_access (identifier) (identifier))
|
||||
(identifier)))
|
||||
|
||||
===========================================
|
||||
parses dynamic property access
|
||||
dynamic property access
|
||||
==========================================
|
||||
|
||||
object[propertName()] = propertyValue();
|
||||
print(object[propertyName()]);
|
||||
|
||||
---
|
||||
(program
|
||||
(expression_statement (assignment
|
||||
|
|
@ -61,18 +75,22 @@ print(object[propertyName()]);
|
|||
(property_access (identifier) (function_call (identifier))))))
|
||||
|
||||
==========================================
|
||||
parses ternary expressions
|
||||
ternary expressions
|
||||
==========================================
|
||||
|
||||
print(isDone() ? stuff : otherStuff);
|
||||
|
||||
---
|
||||
|
||||
(expression_statement
|
||||
(function_call
|
||||
(identifier)
|
||||
(ternary (function_call (identifier)) (identifier) (identifier))))
|
||||
|
||||
==========================================
|
||||
parses mathematical operators
|
||||
mathematical operators
|
||||
==========================================
|
||||
|
||||
-a + b * c - d / +e
|
||||
|
||||
---
|
||||
|
|
@ -84,11 +102,13 @@ parses mathematical operators
|
|||
(math_op (identifier) (math_op (identifier))))))
|
||||
|
||||
==========================================
|
||||
parses boolean operators
|
||||
boolean operators
|
||||
=========================================
|
||||
|
||||
!a || !(b && c)
|
||||
|
||||
---
|
||||
|
||||
(expression_statement
|
||||
(bool_op
|
||||
(bool_op (identifier))
|
||||
|
|
@ -96,19 +116,22 @@ parses boolean operators
|
|||
(expression (bool_op (identifier) (identifier))))))
|
||||
|
||||
===========================================
|
||||
parses the type operators
|
||||
type operators
|
||||
===========================================
|
||||
|
||||
print((x instanceof Array) || (typeof x == "string"))
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier)
|
||||
(bool_op
|
||||
(expression (instanceof_expression (identifier) (identifier)))
|
||||
(expression (typeof_expression (bool_op (identifier) (string)))))))
|
||||
|
||||
============================================
|
||||
parses the 'in' operator
|
||||
the 'in' operator
|
||||
===========================================
|
||||
|
||||
print(x in y)
|
||||
|
||||
---
|
||||
|
|
@ -117,13 +140,16 @@ print(x in y)
|
|||
(in_expression (identifier) (identifier))))
|
||||
|
||||
============================================
|
||||
parses assignment operators
|
||||
assignment operators
|
||||
============================================
|
||||
|
||||
x += 1;
|
||||
x -= 1;
|
||||
x *= 2;
|
||||
x /= 2;
|
||||
|
||||
---
|
||||
|
||||
(program
|
||||
(expression_statement (assignment (identifier) (number)))
|
||||
(expression_statement (assignment (identifier) (number)))
|
||||
|
|
@ -131,11 +157,13 @@ x /= 2;
|
|||
(expression_statement (assignment (identifier) (number))))
|
||||
|
||||
============================================
|
||||
parses property access and operators
|
||||
property access and operators
|
||||
============================================
|
||||
|
||||
print(x.y.z && a.b.c)
|
||||
|
||||
---
|
||||
|
||||
(expression_statement (function_call (identifier)
|
||||
(bool_op
|
||||
(property_access (property_access (identifier) (identifier)) (identifier))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue