1
0

Fix set types

This commit is contained in:
Jip J. Dekker 2021-01-15 10:48:08 +11:00
parent 64c0fa9e9f
commit 6dd0013ce1
5 changed files with 6951 additions and 6422 deletions

View File

@ -99,14 +99,14 @@ Set
===
set of int: basic_set;
set of var opt int: qualified_type_set;
var opt set of float: qualified_type_set;
set of X: named_type_set;
set of 1..10: expr_type_set;
---
(source_file
(declaration (set_type (type_base (primitive_type))) (identifier))
(declaration (set_type (type_base (primitive_type))) (identifier))
(declaration (set_type (type_base (identifier))) (identifier))
(declaration (set_type (type_base (infix_operator (integer_literal) (integer_literal)))) (identifier)))
(declaration (type_base (primitive_type)) (identifier))
(declaration (type_base (primitive_type)) (identifier))
(declaration (type_base (identifier)) (identifier))
(declaration (type_base (infix_operator (integer_literal) (integer_literal))) (identifier)))

View File

@ -260,17 +260,17 @@ module.exports = grammar({
'"'
),
_type: ($) => choice($.array_type, $.type_base, $.set_type),
_type: ($) => choice($.array_type, $.type_base),
array_type: ($) =>
seq("array", "[", sepBy1(",", $.type_base), "]", "of", $.type_base),
seq("array", "[", sepBy1(",", $.type_base), "]", "of", $._type),
type_base: ($) =>
seq(
optional(field("var_par", choice("var", "par"))),
optional(field("opt", "opt")),
optional(field("set", seq("set", "of"))),
choice($.primitive_type, $._expression)
),
primitive_type: ($) => choice(...primitive_types),
set_type: ($) => seq("set", "of", $.type_base),
_literal: ($) =>
choice(

48
src/grammar.json vendored
View File

@ -1842,10 +1842,6 @@
{
"type": "SYMBOL",
"name": "type_base"
},
{
"type": "SYMBOL",
"name": "set_type"
}
]
},
@ -1907,7 +1903,7 @@
},
{
"type": "SYMBOL",
"name": "type_base"
"name": "_type"
}
]
},
@ -1955,6 +1951,31 @@
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "set",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "set"
},
{
"type": "STRING",
"value": "of"
}
]
}
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
@ -1995,23 +2016,6 @@
}
]
},
"set_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "set"
},
{
"type": "STRING",
"value": "of"
},
{
"type": "SYMBOL",
"name": "type_base"
}
]
},
"_literal": {
"type": "CHOICE",
"members": [

35
src/node-types.json vendored
View File

@ -131,10 +131,6 @@
"type": "array_type",
"named": true
},
{
"type": "set_type",
"named": true
},
{
"type": "type_base",
"named": true
@ -240,7 +236,7 @@
"required": true,
"types": [
{
"type": "type_base",
"type": "_type",
"named": true
}
]
@ -973,21 +969,6 @@
]
}
},
{
"type": "set_type",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "type_base",
"named": true
}
]
}
},
{
"type": "source_file",
"named": true,
@ -1056,6 +1037,20 @@
}
]
},
"set": {
"multiple": true,
"required": false,
"types": [
{
"type": "of",
"named": false
},
{
"type": "set",
"named": false
}
]
},
"var_par": {
"multiple": false,
"required": false,

13274
src/parser.c vendored

File diff suppressed because it is too large Load Diff