Give names to object kv-pairs and assignments in var declarations

pull/70/head
Max Brunsfeld 2014-08-25 15:26:58 +07:00
parent faa41ac814
commit 0554ae719f
3 changed files with 49 additions and 35 deletions

@ -88,12 +88,14 @@ module.exports = compiler.grammar
keyword("var"),
commaSep(choice(
@identifier,
seq(
@identifier,
"=",
@expression))),
@var_assignment)),
terminator())
var_assignment: -> seq(
@identifier,
"=",
@expression)
expression: -> choice(
@identifier,
@number,
@ -113,27 +115,28 @@ module.exports = compiler.grammar
@bool_op,
@math_op,
@rel_op,
@assignment,
@var_assignment,
@member_assignment,
@subscript_assignment,
seq("(", @expression, ")"))
member_access: -> seq(
@expression,
".",
@identifier)
function_call: -> seq(
@expression,
"(",
commaSep(@expression),
")")
assignment: -> seq(
choice(
member_access: -> seq(
@expression,
".",
@identifier)
member_assignment: -> seq(
@expression,
".",
@identifier,
@member_access,
@subscript_access),
"=",
@expression)
"=",
@expression)
subscript_access: -> seq(
@expression,
@ -141,14 +144,24 @@ module.exports = compiler.grammar
@expression,
"]")
subscript_assignment: -> seq(
@expression,
"[",
@expression,
"]",
"=",
@expression)
object: -> seq(
"{",
commaSep(seq(
choice(@identifier, @string),
":",
@expression))
commaSep(@pair),
"}")
pair: -> seq(
choice(@identifier, @string),
":",
@expression)
function: -> seq(
keyword("function"),
@formal_parameters,

@ -84,11 +84,11 @@ Objects
(program
(expression_statement (object))
(expression_statement (object
(identifier) (string)))
(pair (identifier) (string))))
(expression_statement (object
(identifier) (string)
(string) (identifier)
(identifier) (number))))
(pair (identifier) (string))
(pair (string) (identifier))
(pair (identifier) (number)))))
============================================
Arrays
@ -220,9 +220,9 @@ x["y"] = 0;
---
(program
(expression_statement (assignment
(expression_statement (var_assignment
(identifier) (number)))
(expression_statement (assignment
(member_access (identifier) (identifier)) (number)))
(expression_statement (assignment
(subscript_access (identifier) (string)) (number))))
(expression_statement (member_assignment
(identifier) (identifier) (number)))
(expression_statement (subscript_assignment
(identifier) (string) (number))))

@ -38,7 +38,7 @@ for (;;) {
(program
(for_statement
(assignment (identifier) (number))
(var_assignment (identifier) (number))
(rel_op (identifier) (number))
(math_op (identifier))
(expression_statement (function_call (identifier) (identifier))))
@ -88,10 +88,11 @@ var x, y = {}, z;
---
(program
(var_declaration (identifier) (number))
(var_declaration
(var_assignment (identifier) (number)))
(var_declaration
(identifier)
(identifier) (object)
(var_assignment (identifier) (object))
(identifier)))
============================================
@ -115,9 +116,9 @@ Comments
(program
(expression_statement (object
(comment)
(identifier) (number)
(pair (identifier) (number))
(comment)
(identifier) (function (formal_parameters) (statement_block)))))
(pair (identifier) (function (formal_parameters) (statement_block))))))
============================================
Automatic semicolon insertion
@ -134,7 +135,7 @@ if (a) {
(program
(if_statement (identifier) (statement_block
(var_declaration (identifier) (identifier))
(var_declaration (var_assignment (identifier) (identifier)))
(expression_statement (function_call (identifier)))
(expression_statement (function_call (identifier)))
(return_statement (identifier)))))