added support for preprocessor

This commit is contained in:
William Ball 2024-11-22 10:37:30 -08:00
parent ece43957c9
commit 158683891c
5 changed files with 1058 additions and 708 deletions

View file

@ -18,7 +18,7 @@ module.exports = grammar({
rules: { rules: {
program : $ => repeat($.definition), program : $ => repeat(choice($.definition, $.preprocess)),
identifier : $ => /[a-zA-Z_]\w*/, identifier : $ => /[a-zA-Z_]\w*/,
@ -103,5 +103,11 @@ module.exports = grammar({
';', ';',
), ),
preprocess : $ => seq($.command, $.post_command),
post_command : $ => /.+/,
command : $ => '@include',
} }
}); });

30
src/grammar.json generated
View file

@ -4,8 +4,17 @@
"program": { "program": {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL", "type": "SYMBOL",
"name": "definition" "name": "definition"
},
{
"type": "SYMBOL",
"name": "preprocess"
}
]
} }
}, },
"identifier": { "identifier": {
@ -374,6 +383,27 @@
"value": ";" "value": ";"
} }
] ]
},
"preprocess": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "SYMBOL",
"name": "post_command"
}
]
},
"post_command": {
"type": "PATTERN",
"value": ".+"
},
"command": {
"type": "STRING",
"value": "@include"
} }
}, },
"extras": [ "extras": [

31
src/node-types.json generated
View file

@ -193,6 +193,25 @@
} }
} }
}, },
{
"type": "preprocess",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "command",
"named": true
},
{
"type": "post_command",
"named": true
}
]
}
},
{ {
"type": "program", "type": "program",
"named": true, "named": true,
@ -204,6 +223,10 @@
{ {
"type": "definition", "type": "definition",
"named": true "named": true
},
{
"type": "preprocess",
"named": true
} }
] ]
} }
@ -284,6 +307,10 @@
"type": "block_comment", "type": "block_comment",
"named": true "named": true
}, },
{
"type": "command",
"named": true
},
{ {
"type": "comment", "type": "comment",
"named": true "named": true
@ -300,6 +327,10 @@
"type": "identifier", "type": "identifier",
"named": true "named": true
}, },
{
"type": "post_command",
"named": true
},
{ {
"type": "star", "type": "star",
"named": true "named": true

1661
src/parser.c generated

File diff suppressed because it is too large Load diff

32
test/corpus/include.txt Normal file
View file

@ -0,0 +1,32 @@
=======
Include
=======
@include foo.pg
baz : * := A;
@include bar.pg
---
(program
(preprocess
(command)
(post_command))
(definition
(identifier)
(ascription
(expr
(app_term
(app
(term
(star))))))
(expr
(app_term
(app
(term
(identifier))))))
(preprocess
(command)
(post_command)))