@@ -68,13 +68,16 @@ export default grammar({
|
|||||||
instantiation: $ => seq($.typeRef, '(', optional($.parameter_list), ')', $.identifier),
|
instantiation: $ => seq($.typeRef, '(', optional($.parameter_list), ')', $.identifier),
|
||||||
|
|
||||||
// Declarations
|
// Declarations
|
||||||
declaration: $ => seq(choice($.parserDeclaration, $.parserTypeDeclaration, $.type_declaration, $.function_declaration, $.control_declaration)),
|
declaration: $ => seq(choice($.parserDeclaration, $.parserTypeDeclaration, $.type_declaration, $.function_declaration, $.control_declaration, $.extern_declaration)),
|
||||||
|
|
||||||
type_declaration: $=> choice($.struct_declaration),
|
type_declaration: $=> choice($.struct_declaration),
|
||||||
struct_declaration: $ => seq($.struct, $.identifier, '{', optional($.struct_declaration_fields), '}'),
|
struct_declaration: $ => seq($.struct, $.identifier, '{', optional($.struct_declaration_fields), '}'),
|
||||||
struct_declaration_fields: $=> repeat1(seq($.variableDeclaration)),
|
struct_declaration_fields: $=> repeat1(seq($.variableDeclaration)),
|
||||||
|
|
||||||
function_declaration: $=> seq($.typeRef, $.identifier, $.parameters, $.statement),
|
extern_declaration: $=> seq($.extern, $.declaration),
|
||||||
|
|
||||||
|
// The body is truly optional only in the extern case. This check is handled by the compiler.
|
||||||
|
function_declaration: $=> seq($.typeRef, $.identifier, $.parameters, optional($.blockStatement)),
|
||||||
|
|
||||||
// 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), $.parameters),
|
parserTypeDeclaration: $ => seq(optional($.annotations), $.parser, field('parser_name', $.identifier), optional($.typeParameters), $.parameters),
|
||||||
|
|||||||
@@ -282,18 +282,16 @@ bool functionb() {
|
|||||||
)
|
)
|
||||||
(identifier)
|
(identifier)
|
||||||
(parameters)
|
(parameters)
|
||||||
(statement
|
(blockStatement
|
||||||
(blockStatement
|
(statements
|
||||||
(statements
|
(statement
|
||||||
(statement
|
(variableDeclaration
|
||||||
(variableDeclaration
|
(typeRef
|
||||||
(typeRef
|
(baseType
|
||||||
(baseType
|
(string)
|
||||||
(string)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
(identifier)
|
|
||||||
)
|
)
|
||||||
|
(identifier)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -340,18 +338,16 @@ bool functionb(bool a, int b) {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(statement
|
(blockStatement
|
||||||
(blockStatement
|
(statements
|
||||||
(statements
|
(statement
|
||||||
(statement
|
(variableDeclaration
|
||||||
(variableDeclaration
|
(typeRef
|
||||||
(typeRef
|
(baseType
|
||||||
(baseType
|
(string)
|
||||||
(string)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
(identifier)
|
|
||||||
)
|
)
|
||||||
|
(identifier)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -416,17 +412,78 @@ bool functionb(in bool a, out int b, inout string c) {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(statement
|
(blockStatement
|
||||||
(blockStatement
|
(statements
|
||||||
(statements
|
(statement
|
||||||
(statement
|
(variableDeclaration
|
||||||
(variableDeclaration
|
(typeRef
|
||||||
|
(baseType
|
||||||
|
(string)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
=========================
|
||||||
|
Extern Function Declaration
|
||||||
|
=========================
|
||||||
|
extern bool functionb(in bool a, out int b, inout string c);
|
||||||
|
---
|
||||||
|
(p4program
|
||||||
|
(declaration
|
||||||
|
(extern_declaration
|
||||||
|
(extern)
|
||||||
|
(declaration
|
||||||
|
(function_declaration
|
||||||
|
(typeRef
|
||||||
|
(baseType
|
||||||
|
(bool)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(identifier)
|
||||||
|
(parameters
|
||||||
|
(parameter_list
|
||||||
|
(parameter_list
|
||||||
|
(parameter_list
|
||||||
|
(parameter
|
||||||
|
(direction
|
||||||
|
(in)
|
||||||
|
)
|
||||||
|
(typeRef
|
||||||
|
(baseType
|
||||||
|
(bool)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(parameter
|
||||||
|
(direction
|
||||||
|
(out)
|
||||||
|
)
|
||||||
|
(typeRef
|
||||||
|
(baseType
|
||||||
|
(int)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(parameter
|
||||||
|
(direction
|
||||||
|
(inout)
|
||||||
|
)
|
||||||
(typeRef
|
(typeRef
|
||||||
(baseType
|
(baseType
|
||||||
(string)
|
(string)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(identifier)
|
(identifier)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -43,15 +43,13 @@ int fun() {
|
|||||||
)
|
)
|
||||||
(identifier)
|
(identifier)
|
||||||
(parameters)
|
(parameters)
|
||||||
(statement
|
(blockStatement
|
||||||
(blockStatement
|
(statements
|
||||||
(statements
|
(statement
|
||||||
(statement
|
(return_statement
|
||||||
(return_statement
|
(expression
|
||||||
(expression
|
(simple_expression
|
||||||
(simple_expression
|
(integer)
|
||||||
(integer)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user