1
0

Add parantheses to override set precedences

This commit is contained in:
Jip J. Dekker 2021-01-10 22:04:21 +11:00
parent 170c3be571
commit 3340f6c287
5 changed files with 3050 additions and 2752 deletions

View File

@ -108,6 +108,23 @@ slice = my_collection[1..2];
(assignment_item (identifier) (index_expression (identifier) (binary_operation (unary_operation (identifier)) (integer_literal)))) (assignment_item (identifier) (index_expression (identifier) (binary_operation (unary_operation (identifier)) (integer_literal))))
(assignment_item (identifier) (index_expression (identifier) (binary_operation (integer_literal) (integer_literal))))) (assignment_item (identifier) (index_expression (identifier) (binary_operation (integer_literal) (integer_literal)))))
===========
Precedences
===========
given_precedence = (1 + 1) * 1;
mult_first = 1 + 1 * 1;
exp_first = 1 * 1 ^ 1;
annotation_bind = 1 ^ 1::some_ann;
---
(source_file
(assignment_item (identifier) (binary_operation (binary_operation (integer_literal) (integer_literal)) (integer_literal)))
(assignment_item (identifier) (binary_operation (integer_literal) (binary_operation (integer_literal) (integer_literal))))
(assignment_item (identifier) (binary_operation (integer_literal) (binary_operation (integer_literal) (integer_literal))))
(assignment_item (identifier) (binary_operation (integer_literal) (binary_operation (integer_literal) (identifier)))))
============== ==============
Unary Operator Unary Operator
============== ==============

View File

@ -49,6 +49,7 @@ module.exports = grammar({
$.index_expression, $.index_expression,
$.unary_operation, $.unary_operation,
// TODO: Other expression types // TODO: Other expression types
seq('(', $._expression, ')'),
), ),
binary_operation: $ => { binary_operation: $ => {

17
src/grammar.json vendored
View File

@ -104,6 +104,23 @@
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "unary_operation" "name": "unary_operation"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": ")"
}
]
} }
] ]
}, },

56
src/node-types.json vendored
View File

@ -67,9 +67,17 @@
"named": true, "named": true,
"fields": { "fields": {
"expr": { "expr": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": "absent", "type": "absent",
"named": true "named": true
@ -141,9 +149,17 @@
"named": true, "named": true,
"fields": { "fields": {
"left": { "left": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": "absent", "type": "absent",
"named": true "named": true
@ -325,9 +341,17 @@
] ]
}, },
"right": { "right": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": "absent", "type": "absent",
"named": true "named": true
@ -397,6 +421,14 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": ",", "type": ",",
"named": false "named": false
@ -535,9 +567,17 @@
"named": true, "named": true,
"fields": { "fields": {
"collection": { "collection": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": "absent", "type": "absent",
"named": true "named": true
@ -596,6 +636,14 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{ {
"type": ",", "type": ",",
"named": false "named": false

5711
src/parser.c vendored

File diff suppressed because it is too large Load Diff