record syntax
This commit is contained in:
14
grammar.js
14
grammar.js
@@ -126,7 +126,7 @@ module.exports = grammar({
|
|||||||
// optional doesn't seem to help, so we have an error at void
|
// optional doesn't seem to help, so we have an error at void
|
||||||
optional(seq("where", optional(layout($, $.sigDecl)))),
|
optional(seq("where", optional(layout($, $.sigDecl)))),
|
||||||
),
|
),
|
||||||
jsLitString: $ => seq("`",alias(/[^`]+/,$.jsStringFragment),"`"),
|
jsLitString: $ => seq("`", alias(/[^`]+/, $.jsStringFragment), "`"),
|
||||||
deriveDecl: $ => seq("derive", repeat1($.identifier)),
|
deriveDecl: $ => seq("derive", repeat1($.identifier)),
|
||||||
pfuncDecl: ($) => seq(
|
pfuncDecl: ($) => seq(
|
||||||
"pfunc",
|
"pfunc",
|
||||||
@@ -148,10 +148,18 @@ module.exports = grammar({
|
|||||||
$.number,
|
$.number,
|
||||||
repeat1(alias($.identifier, $.name))
|
repeat1(alias($.identifier, $.name))
|
||||||
),
|
),
|
||||||
|
_telescope: $ => choice($.identifier, $.binder),
|
||||||
|
recordDecl: $ =>
|
||||||
|
seq(
|
||||||
|
"record",
|
||||||
|
seq(alias($.identifier, $.recordName), optional($._telescope)),
|
||||||
|
"where",
|
||||||
|
layout($, choice(seq("constructor", $.identifier), $.sigDecl)),
|
||||||
|
),
|
||||||
classDecl: $ =>
|
classDecl: $ =>
|
||||||
seq(
|
seq(
|
||||||
"class",
|
"class",
|
||||||
seq(alias($.identifier, $.className), repeat($._atom)),
|
seq(alias($.identifier, $.className), optional($._telescope)),
|
||||||
"where",
|
"where",
|
||||||
layout($, $.sigDecl)
|
layout($, $.sigDecl)
|
||||||
),
|
),
|
||||||
@@ -170,7 +178,7 @@ module.exports = grammar({
|
|||||||
$.shortDataDecl,
|
$.shortDataDecl,
|
||||||
$.classDecl,
|
$.classDecl,
|
||||||
$.instanceDecl,
|
$.instanceDecl,
|
||||||
// $.recordDecl,
|
$.recordDecl,
|
||||||
// $.exportDecl,
|
// $.exportDecl,
|
||||||
$.deriveDecl,
|
$.deriveDecl,
|
||||||
$.sigDecl,
|
$.sigDecl,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"∀" ; "forall"
|
"∀" ; "forall"
|
||||||
"import"
|
"import"
|
||||||
"uses" "derive"
|
"uses" "derive"
|
||||||
"class" "instance" ;"record" "constructor"
|
"class" "instance" "record" "constructor"
|
||||||
"if" "then" "else"
|
"if" "then" "else"
|
||||||
"|" "<-" "=>" "$" ":"
|
"|" "<-" "=>" "$" ":"
|
||||||
] @keyword
|
] @keyword
|
||||||
|
|||||||
114
src/grammar.json
generated
114
src/grammar.json
generated
@@ -1251,6 +1251,105 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"_telescope": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "binder"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"recordDecl": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "record"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "recordName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_telescope"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "where"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "REPEAT",
|
||||||
|
"content": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "semi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "constructor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "sigDecl"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "end"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"classDecl": {
|
"classDecl": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
@@ -1271,11 +1370,16 @@
|
|||||||
"value": "className"
|
"value": "className"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "REPEAT",
|
"type": "CHOICE",
|
||||||
"content": {
|
"members": [
|
||||||
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_atom"
|
"name": "_telescope"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1400,6 +1504,10 @@
|
|||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "instanceDecl"
|
"name": "instanceDecl"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "recordDecl"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "deriveDecl"
|
"name": "deriveDecl"
|
||||||
|
|||||||
73
src/node-types.json
generated
73
src/node-types.json
generated
@@ -61,7 +61,7 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"types": [
|
"types": [
|
||||||
{
|
{
|
||||||
"type": "character",
|
"type": "binder",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -76,14 +76,6 @@
|
|||||||
"type": "identifier",
|
"type": "identifier",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "number",
|
|
||||||
"named": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "recUpdate",
|
|
||||||
"named": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "semi",
|
"type": "semi",
|
||||||
"named": true
|
"named": true
|
||||||
@@ -95,14 +87,6 @@
|
|||||||
{
|
{
|
||||||
"type": "start",
|
"type": "start",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"named": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "typeExpr",
|
|
||||||
"named": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -511,6 +495,10 @@
|
|||||||
"type": "ptypeDecl",
|
"type": "ptypeDecl",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "recordDecl",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "semi",
|
"type": "semi",
|
||||||
"named": true
|
"named": true
|
||||||
@@ -617,6 +605,45 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "recordDecl",
|
||||||
|
"named": true,
|
||||||
|
"fields": {},
|
||||||
|
"children": {
|
||||||
|
"multiple": true,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "binder",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "end",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "identifier",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "recordName",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "semi",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "sigDecl",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "start",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "shortDataDecl",
|
"type": "shortDataDecl",
|
||||||
"named": true,
|
"named": true,
|
||||||
@@ -881,6 +908,10 @@
|
|||||||
"type": "conName",
|
"type": "conName",
|
||||||
"named": false
|
"named": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "constructor",
|
||||||
|
"named": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "data",
|
"type": "data",
|
||||||
"named": false
|
"named": false
|
||||||
@@ -961,6 +992,14 @@
|
|||||||
"type": "quantity",
|
"type": "quantity",
|
||||||
"named": false
|
"named": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "record",
|
||||||
|
"named": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "recordName",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "semi",
|
"type": "semi",
|
||||||
"named": true
|
"named": true
|
||||||
|
|||||||
36959
src/parser.c
generated
36959
src/parser.c
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user