Add more expressions

pull/70/head
Max Brunsfeld 2014-07-30 08:20:28 +07:00
parent 49c31f527c
commit 0bd6bb3c80
2 changed files with 107 additions and 6 deletions

@ -1,5 +1,8 @@
compiler = require("tree-sitter-compiler")
{ choice, repeat, seq, keyword, token, optional } = compiler.rules
{ blank, choice, repeat, seq, keyword, token, optional } = compiler.rules
commaSep = (rule) ->
choice(blank(), seq(rule, repeat(seq(",", rule))))
module.exports = compiler.grammar
name: 'javascript',
@ -20,11 +23,32 @@ module.exports = compiler.grammar
@statement)
expression: -> choice(
@variable,
@identifier,
@number,
@string)
@string,
@regex,
@true,
@true,
@false,
@null,
@undefined,
@object,
@array)
object: -> seq(
"{",
commaSep(seq(
choice(@identifier, @string),
":",
@expression))
"}")
array: -> seq(
"[",
commaSep(@expression)
"]")
variable: -> /\a+\d*/,
identifier: -> /\a+\d*/
number: -> token(seq(
/\d+/,
@ -33,3 +57,12 @@ module.exports = compiler.grammar
string: -> token(choice(
seq('"', repeat(choice(/[^"]/, '\\"')), '"'),
seq("'", repeat(choice(/[^']/, "\\'")), "'")))
regex: -> token(seq(
'/', repeat(choice(/[^/]/, '\\/')), '/',
repeat(choice('i', 'g'))))
true: -> keyword("true")
false: -> keyword("false")
null: -> keyword("null")
undefined: -> keyword("undefined")

@ -34,5 +34,73 @@ theVar2;
---
(program
(expression_statement (variable))
(expression_statement (variable)))
(expression_statement (identifier))
(expression_statement (identifier)))
============================================
Booleans
============================================
null;
undefined;
true;
false;
---
(program
(expression_statement (null))
(expression_statement (undefined))
(expression_statement (true))
(expression_statement (false)))
============================================
Regexps
============================================
/one/;
/one/g;
/one/i;
/one/gi;
---
(program
(expression_statement (regex))
(expression_statement (regex))
(expression_statement (regex))
(expression_statement (regex)))
============================================
Objects
============================================
{};
{ key1: "value1" };
{ key1: "value1", "key2": value2, key3: 3.0 };
---
(program
(expression_statement (object))
(expression_statement (object
(identifier) (string)))
(expression_statement (object
(identifier) (string)
(string) (identifier)
(identifier) (number))))
============================================
Arrays
============================================
[];
[ "item1" ];
[ "item1", item2 ];
---
(program
(expression_statement (array))
(expression_statement (array (string)))
(expression_statement (array (string) (identifier))))