diff --git a/tree-sitter-p4/grammar.js b/tree-sitter-p4/grammar.js index 1d86d8e..787e147 100644 --- a/tree-sitter-p4/grammar.js +++ b/tree-sitter-p4/grammar.js @@ -100,12 +100,13 @@ export default grammar({ // General statements 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), '}'), conditionalStatement: $ => choice(prec(1, seq($.if, '(', $.expression, ')', $.statement)), prec(2, seq($.if, '(', $.expression, ')', $.statement, $.else, $.statement))), expressionStatement: $=> seq($.expression, $._semicolon), assignmentStatement: $=> seq($.expression, $.assignment, $.expression, $._semicolon), return_statement: $=> seq($._return, $.expression, $._semicolon), + exit_statement: $=> seq($._exit, $._semicolon), // Parser statements parserStatements: $ => repeat1($.parserStatement), @@ -172,7 +173,7 @@ export default grammar({ entries: $ => "entries", enum: $ => "enum", error: $ => "error", - exit: $ => "exit", + _exit: $ => "exit", exact: $ => "exact", extern: $ => "extern", false: $ => "false", diff --git a/tree-sitter-p4/test/corpus/statements.txt b/tree-sitter-p4/test/corpus/statements.txt index 640ecb1..52caba1 100644 --- a/tree-sitter-p4/test/corpus/statements.txt +++ b/tree-sitter-p4/test/corpus/statements.txt @@ -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 ========================= int fun() {