grammar: Add exit statement

Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
Will Hawkins
2026-04-20 02:27:08 -04:00
parent fa1f694d76
commit 6cb28bc873
2 changed files with 31 additions and 2 deletions
+3 -2
View File
@@ -100,12 +100,13 @@ export default grammar({
// General statements // General statements
statements: $ => repeat1($.statement), statements: $ => repeat1($.statement),
statement: $ => choice($.conditionalStatement, $.blockStatement, $.expressionStatement, $.assignmentStatement, $.variableDeclaration, $.return_statement),// Limited, so far. statement: $ => choice($.conditionalStatement, $.blockStatement, $.expressionStatement, $.assignmentStatement, $.variableDeclaration, $.return_statement, $.exit_statement),// Limited, so far.
blockStatement: $ => seq(optional($.annotations), '{', optional($.statements), '}'), blockStatement: $ => seq(optional($.annotations), '{', optional($.statements), '}'),
conditionalStatement: $ => choice(prec(1, seq($.if, '(', $.expression, ')', $.statement)), prec(2, seq($.if, '(', $.expression, ')', $.statement, $.else, $.statement))), conditionalStatement: $ => choice(prec(1, seq($.if, '(', $.expression, ')', $.statement)), prec(2, seq($.if, '(', $.expression, ')', $.statement, $.else, $.statement))),
expressionStatement: $=> seq($.expression, $._semicolon), expressionStatement: $=> seq($.expression, $._semicolon),
assignmentStatement: $=> seq($.expression, $.assignment, $.expression, $._semicolon), assignmentStatement: $=> seq($.expression, $.assignment, $.expression, $._semicolon),
return_statement: $=> seq($._return, $.expression, $._semicolon), return_statement: $=> seq($._return, $.expression, $._semicolon),
exit_statement: $=> seq($._exit, $._semicolon),
// Parser statements // Parser statements
parserStatements: $ => repeat1($.parserStatement), parserStatements: $ => repeat1($.parserStatement),
@@ -172,7 +173,7 @@ export default grammar({
entries: $ => "entries", entries: $ => "entries",
enum: $ => "enum", enum: $ => "enum",
error: $ => "error", error: $ => "error",
exit: $ => "exit", _exit: $ => "exit",
exact: $ => "exact", exact: $ => "exact",
extern: $ => "extern", extern: $ => "extern",
false: $ => "false", false: $ => "false",
+28
View File
@@ -1,4 +1,32 @@
========================= =========================
Exit Statement
=========================
control T() {
apply {
exit;
}
};
---
(p4program
(declaration
(control_declaration
(control)
(identifier)
(parameters)
(apply)
(statement
(blockStatement
(statements
(statement
(exit_statement)
)
)
)
)
)
)
)
=========================
Return Statement Return Statement
========================= =========================
int fun() { int fun() {