Changes
3 changed files (+173/-26)
-
-
@@ -19,6 +19,7 @@ namespace_member: $ => seq(repeat($.attribute), choice( $.namespace_declaration, $.method_declaration, $.field_declaration ) ),
-
@@ -33,32 +34,97 @@attribute_argument: $ => seq( $.identifier, '=', $.expression $._expression ), expression: $ => choice( $.assignment_expression, $.arithmetic_expression, _expression: $ => choice( $.literal, seq('(', $._expression, ')'), $.member_access_expression, $.method_call_expression, $.postfix_expression, $.static_cast_expression, $.typeof_expression, $.sizeof_expression, $.unary_expression, $.multiplicative_expression, $.symbol $.arithmetic_expression, $.in_expression, $.bitshift_expression, $.dynamic_cast_expression, $.type_relational_expression, $.relational_expression, $.equality_expression, $.bitwise_and_expression, $.bitwise_xor_expression, $.bitwise_or_expression, $.logical_and_expression, $.logical_or_expression, $.null_coalescing_expression, $.ternary_expression, $.assignment_expression ), assignment_operator: $ => choice('=', '+=', '-=', '|=', '&=', '^=', '/=', '*=', '%=', '<<=', '>>='), assignment_expression: $ => prec.left(0, seq($.expression, $.assignment_operator, $.expression)), member_access_expression: $ => prec.right(15, seq( optional(seq( choice( $.identifier, seq('(', $._expression, ')') ), choice('.', '?.', '->'), )), $.identifier ), ), arithmetic_expression: $ => prec.left(0, seq($.expression, choice('+', '-'), $.expression)), multiplicative_expression: $ => prec.left(1, seq($.expression, choice('*', '/'), $.expression)), method_call_expression: $ => prec.right(15, seq( choice( seq('(', $._expression, ')'), seq($.member_access_expression, optional($.type_arguments)) ), '(', optional(seq($._expression, repeat(seq(',', $._expression)))), ')' ) ), postfix_expression: $ => prec.left(14, seq($._expression, choice('++', '--'))), static_cast_expression: $ => prec.right(13, seq(seq('(', $.type_weak, ')'), $._expression)), typeof_expression: $ => prec.right(13, seq('typeof', '(', $._expression, ')')), sizeof_expression: $ => prec.right(13, seq('sizeof', '(', $.type, ')')), unary_expression: $ => prec.right(13, seq(choice('!', '~', '++', '--', '-', '*', '&'), $._expression)), multiplicative_expression: $ => prec.left(12, seq($._expression, choice('*', '/', '%'), $._expression)), arithmetic_expression: $ => prec.left(11, seq($._expression, choice('+', '-'), $._expression)), bitshift_expression: $ => prec.left(10, seq($._expression, choice('<<', '>>'), $._expression)), in_expression: $ => prec.left(9, seq($._expression, optional('not'), 'in', $._expression)), dynamic_cast_expression: $ => prec.left(9, seq($._expression, 'as', $.type)), type_relational_expression: $ => prec.left(9, seq($._expression, 'is', $.type)), relational_expression: $ => prec.left(9, seq($._expression, choice('<', '<=', '>=', '>'), $._expression)), equality_expression: $ => prec.left(8, seq($._expression, choice('==', '!='), $._expression)), bitwise_and_expression: $ => prec.left(7, seq($._expression, '&', $._expression)), bitwise_xor_expression: $ => prec.left(6, seq($._expression, '^', $._expression)), bitwise_or_expression: $ => prec.left(5, seq($._expression, '|', $._expression)), logical_and_expression: $ => prec.left(4, seq($._expression, '&&', $._expression)), logical_or_expression: $ => prec.left(3, seq($._expression, '||', $._expression)), null_coalescing_expression: $ => prec.left(2, seq($._expression, '??', $._expression)), ternary_expression: $ => prec.right(1, seq($._expression, '?', $._expression, ':', $._expression)), _assignment_operator: $ => choice('=', '+=', '-=', '|=', '&=', '^=', '/=', '*=', '%=', '<<=', '>>='), assignment_expression: $ => prec.right(0, seq($._expression, $._assignment_operator, $._expression)), boolean: $ => choice('true', 'false'), character: $ => /'\S'/, integer: $ => /[1-9]\d*|0[0-7]*/, integer: $ => choice(/[1-9]\d*|0[0-7]*/, /0[xX][A-Fa-f0-9]+/), null: $ => 'null', real: $ => /\d+(\.\d+)?([eE][+-]?\d+)?/, regex: $ => /\/([^\\\/\n]|\\[\\\/A-z0|\[\]^$?.(){}+\-*])+\/[gmxsu]*/, string: $ => /".*"/, template_string: $ => seq( /@"[^\n]*/, repeat(seq( optional(seq('$(', $.expression, ')')), optional(seq('$(', $._expression, ')')), /[^\n]*/ )), '"'
-
@@ -66,9 +132,8 @@ ),verbatim_string: $=> /"""(.|\n)*"""/, literal: $ => choice( 'true', 'false', 'null', $.boolean, $.null, $.character, $.integer, $.real,
-
@@ -78,11 +143,20 @@ $.template_string,$.verbatim_string ), type: $ => // TODO: remove this? type: $ => prec.right( choice( seq('void', repeat('*')), seq( optional('dynamic'), optional('weak'), '(', $.type_weak, ')', repeat1($.array_type) ), seq( optional('dynamic'), optional('unowned'), $.symbol, optional($.type_arguments),
-
@@ -90,22 +164,33 @@ optional('*'),optional('?'), repeat($.array_type) ) ), ) ), type_weak: $ => type_weak: $ => prec.right( choice( seq('void', repeat('*')), seq( optional('dynamic'), optional('unowned'), optional('weak'), '(', $.type_weak, ')', repeat1($.array_type) ), seq( optional('dynamic'), optional('unowned'), optional('weak'), $.symbol, optional($.type_arguments), optional('*'), optional('?'), repeat($.array_type) ) ), ) ), type_arguments: $ => seq( '<',
-
@@ -114,17 +199,18 @@ repeat(seq(',', $.type)),'>' ), array_type: $ => array_type: $ => prec.right( seq( '[', optional($.array_size), ']', optional('?') ), ) ), array_size: $ => seq( $.expression, repeat(seq(',', $.expression)) $._expression, repeat(seq(',', $._expression)) ), member_declaration_modifier: $ => choice(
-
@@ -155,13 +241,47 @@ repeat($.namespace_member),'}' ), parameter: $ => seq( $.type_weak, $.identifier, optional(seq('=', $._expression)) ), method_declaration: $ => seq( optional($.access_modifier), repeat($.member_declaration_modifier), $.type_weak, $.identifier, optional($.type_arguments), '(', repeat($.parameter), ')', optional(seq('throws', $.type)), optional(seq(choice('requires', 'ensures'), '(', $._expression, ')')), choice($.block, ';') ), field_declaration: $ => seq( optional($.access_modifier), repeat($.member_declaration_modifier), $.type_weak, $.identifier, optional(seq('=', $.expression)), optional(seq('=', $._expression)), ';' ), block: $ => seq('{', repeat($._statement), '}'), _statement: $ => choice( $.block, ';', seq($._expression, ';'), // TODO ) } }, conflicts: $ => [ [$.type, $.type_weak, $._expression], // for static_cast_expression [$._expression, $.type_weak], // for static_cast_expression ] });
-
-
-
@@ -14,9 +14,9 @@ (attribute (identifier))(attribute (identifier) (attribute_argument (identifier) (expression (literal (string)))) (literal (string))) (attribute_argument (identifier) (expression (literal)))) (literal (boolean)))) (namespace_declaration (symbol (identifier)))))
-
-
-
@@ -0,0 +1,27 @@=========== Expressions =========== void main() { 3 + b.c; a in b(); 3 = 3; } --- (source_file (namespace_member (method_declaration (type_weak) (identifier) (block (arithmetic_expression (literal (integer)) (member_access_expression (identifier) (identifier))) (in_expression (member_access_expression (identifier)) (method_call_expression (member_access_expression (identifier)))) (assignment_expression (literal (integer)) (literal (integer)))))))
-