Add Instantations to Grammar

Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
Will Hawkins
2026-02-06 07:45:29 -05:00
parent 285ba829cb
commit bc700509c1
7 changed files with 40 additions and 13 deletions
+5 -2
View File
@@ -22,7 +22,7 @@ export default grammar({
name: 'p4', name: 'p4',
rules: { rules: {
// Start symbol // Start symbol
p4program: $ => optional(repeat($.declaration)), p4program: $ => optional(repeat(seq(choice($.declaration, $.instantiation), $.semicolon))),
// Common // Common
@@ -59,8 +59,11 @@ export default grammar({
annotation: $ => choice(seq('@', "[a-z]+")),// seq('@', "[a-z]+", '(', /* empty for now*/ ')'), seq('@', "[a-z]+", '[', /* empty for now */ ']')), annotation: $ => choice(seq('@', "[a-z]+")),// seq('@', "[a-z]+", '(', /* empty for now*/ ')'), seq('@', "[a-z]+", '[', /* empty for now */ ']')),
// Instantiation
instantiation: $ => seq($.typeRef, '(', optional($.parameterList), ')', $.identifier),
// Declarations // Declarations
declaration: $ => seq(choice($.parserDeclaration, $.parserTypeDeclaration), $.semicolon), declaration: $ => seq(choice($.parserDeclaration, $.parserTypeDeclaration)),
// Make separate productions for the parser type and the parser type declaration because the latter can have type parameters. // Make separate productions for the parser type and the parser type declaration because the latter can have type parameters.
parserTypeDeclaration: $ => seq(optional($.annotations), $.parser, field('parser_name', $.identifier), optional($.typeParameters), '(', optional($.parameterList), ')'), parserTypeDeclaration: $ => seq(optional($.annotations), $.parser, field('parser_name', $.identifier), optional($.typeParameters), '(', optional($.parameterList), ')'),
+7
View File
@@ -0,0 +1,7 @@
parser simple() {
state start {
bool l;
transition accept;
}
}
+4 -4
View File
@@ -43,8 +43,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -92,8 +92,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -141,8 +141,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -194,7 +194,7 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
@@ -0,0 +1,17 @@
=========================
Simple Instantiation
=========================
bool() main;
---
(p4program
(instantiation
(typeRef
(baseType
(bool)
)
)
(identifier)
)
(semicolon)
)
+2 -2
View File
@@ -29,8 +29,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
@@ -75,6 +75,6 @@ parser imple(bool pname) {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
+3 -3
View File
@@ -45,8 +45,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -101,8 +101,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -181,7 +181,7 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
+2 -2
View File
@@ -29,8 +29,8 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )
========================= =========================
@@ -83,6 +83,6 @@ parser simple() {
) )
) )
) )
(semicolon)
) )
(semicolon)
) )