Add integer negation

pull/844/head
Jonathan Arnett 2023-04-24 23:14:52 +07:00
parent c9189c3974
commit 4a3bae27c7
7 changed files with 26512 additions and 25060 deletions

@ -25,6 +25,7 @@ module.exports = grammar({
[$.case_subjects],
[$.source_file],
[$._constant_value, $._case_clause_guard_unit],
[$.integer],
],
rules: {
/* General rules */
@ -333,7 +334,8 @@ module.exports = grammar({
$.block,
$.case,
$.assert,
$.negation,
$.boolean_negation,
$.integer_negation,
$.record_update,
$.tuple_access,
$.field_access,
@ -456,7 +458,8 @@ module.exports = grammar({
field("value", $._expression)
),
assert: ($) => seq("assert", $._assignment),
negation: ($) => seq("!", $._expression_unit),
boolean_negation: ($) => seq("!", $._expression_unit),
integer_negation: ($) => seq("-", $._expression_unit),
_assignment: ($) =>
seq(
field("pattern", $._pattern),

@ -63,7 +63,8 @@
; Operators
(binary_expression
operator: _ @operator)
"!" @operator
(boolean_negation "!" @operator)
(integer_negation "-" @operator)
; Keywords
[

24
src/grammar.json generated

@ -2705,7 +2705,11 @@
},
{
"type": "SYMBOL",
"name": "negation"
"name": "boolean_negation"
},
{
"type": "SYMBOL",
"name": "integer_negation"
},
{
"type": "SYMBOL",
@ -4157,7 +4161,7 @@
}
]
},
"negation": {
"boolean_negation": {
"type": "SEQ",
"members": [
{
@ -4170,6 +4174,19 @@
}
]
},
"integer_negation": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "SYMBOL",
"name": "_expression_unit"
}
]
},
"_assignment": {
"type": "SEQ",
"members": [
@ -6239,6 +6256,9 @@
[
"_constant_value",
"_case_clause_guard_unit"
],
[
"integer"
]
],
"precedences": [],

447
src/node-types.json generated

@ -89,6 +89,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -118,11 +122,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -290,6 +294,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -315,11 +323,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -386,6 +394,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -415,15 +427,15 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "list_pattern",
"type": "list",
"named": true
},
{
"type": "negation",
"type": "list_pattern",
"named": true
},
{
@ -598,6 +610,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -627,15 +643,15 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "list_pattern",
"type": "list",
"named": true
},
{
"type": "negation",
"type": "list_pattern",
"named": true
},
{
@ -780,6 +796,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -809,15 +829,15 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "list_pattern",
"type": "list",
"named": true
},
{
"type": "negation",
"type": "list_pattern",
"named": true
},
{
@ -888,6 +908,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -913,11 +937,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -998,6 +1022,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -1023,19 +1051,19 @@
"named": true
},
{
"type": "let",
"type": "integer_negation",
"named": true
},
{
"type": "let_assert",
"type": "let",
"named": true
},
{
"type": "list",
"type": "let_assert",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -1077,6 +1105,97 @@
]
}
},
{
"type": "boolean_negation",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "anonymous_function",
"named": true
},
{
"type": "assert",
"named": true
},
{
"type": "bit_string",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "integer_negation",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "panic",
"named": true
},
{
"type": "record",
"named": true
},
{
"type": "record_update",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "todo",
"named": true
},
{
"type": "tuple",
"named": true
},
{
"type": "tuple_access",
"named": true
}
]
}
},
{
"type": "case",
"named": true,
@ -1151,6 +1270,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -1176,11 +1299,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -1394,6 +1517,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -1419,11 +1546,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -1915,6 +2042,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -1940,19 +2071,19 @@
"named": true
},
{
"type": "let",
"type": "integer_negation",
"named": true
},
{
"type": "let_assert",
"type": "let",
"named": true
},
{
"type": "list",
"type": "let_assert",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -2239,6 +2370,97 @@
"named": true,
"fields": {}
},
{
"type": "integer_negation",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "anonymous_function",
"named": true
},
{
"type": "assert",
"named": true
},
{
"type": "bit_string",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "integer_negation",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "panic",
"named": true
},
{
"type": "record",
"named": true
},
{
"type": "record_update",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "todo",
"named": true
},
{
"type": "tuple",
"named": true
},
{
"type": "tuple_access",
"named": true
}
]
}
},
{
"type": "label",
"named": true,
@ -2362,6 +2584,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -2387,11 +2613,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -2544,6 +2770,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -2569,11 +2799,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -2636,6 +2866,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -2661,11 +2895,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -2723,6 +2957,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -2748,11 +2986,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -2880,93 +3118,6 @@
"named": true,
"fields": {}
},
{
"type": "negation",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "anonymous_function",
"named": true
},
{
"type": "assert",
"named": true
},
{
"type": "bit_string",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "case",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "negation",
"named": true
},
{
"type": "panic",
"named": true
},
{
"type": "record",
"named": true
},
{
"type": "record_update",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "todo",
"named": true
},
{
"type": "tuple",
"named": true
},
{
"type": "tuple_access",
"named": true
}
]
}
},
{
"type": "panic",
"named": true,
@ -3188,6 +3339,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -3213,11 +3368,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -3290,6 +3445,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -3315,11 +3474,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -3449,6 +3608,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -3494,19 +3657,19 @@
"named": true
},
{
"type": "let",
"type": "integer_negation",
"named": true
},
{
"type": "let_assert",
"type": "let",
"named": true
},
{
"type": "list",
"type": "let_assert",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -3768,6 +3931,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -3793,11 +3960,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -3860,6 +4027,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -3885,11 +4056,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{
@ -4372,6 +4543,10 @@
"type": "block",
"named": true
},
{
"type": "boolean_negation",
"named": true
},
{
"type": "case",
"named": true
@ -4397,11 +4572,11 @@
"named": true
},
{
"type": "list",
"type": "integer_negation",
"named": true
},
{
"type": "negation",
"type": "list",
"named": true
},
{

51055
src/parser.c generated

File diff suppressed because it is too large Load Diff

@ -22,7 +22,7 @@ Bit-string expression
(bit_string_segment_option)))))
================================================================================
Negation
Boolean Negation
================================================================================
!False
@ -31,16 +31,42 @@ True && !False
--------------------------------------------------------------------------------
(source_file
(negation
(boolean_negation
(record
(constructor_name)))
(binary_expression
(record
(constructor_name))
(negation
(boolean_negation
(record
(constructor_name)))))
================================================================================
Integer Negation
================================================================================
{-x}
{-{5*30}}
{-my_fun()}
--------------------------------------------------------------------------------
(source_file
(block
(integer_negation
(identifier)))
(block
(integer_negation
(block
(binary_expression
(integer)
(integer)))))
(block
(integer_negation
(function_call
(identifier)
(arguments)))))
================================================================================
Concatenation
================================================================================

@ -6,3 +6,7 @@ case "12345" {
_ -> ""
// ^ string
}
-x
^ operator
^ variable