diff --git a/p4-16/spec/P4-16-spec.adoc b/p4-16/spec/P4-16-spec.adoc index 2683a36b7a..0fcb98e384 100644 --- a/p4-16/spec/P4-16-spec.adoc +++ b/p4-16/spec/P4-16-spec.adoc @@ -6029,11 +6029,15 @@ The syntax for parser statements is given by the following grammar rules: [source,bison] ---- -include::grammar.adoc[tag=parserStatements] - include::grammar.adoc[tag=parserStatement] +include::grammar.adoc[tag=parserStatementOrDeclaration] + +include::grammar.adoc[tag=parserStatOrDeclList] + include::grammar.adoc[tag=parserBlockStatement] + +include::grammar.adoc[tag=parserConditionalStatement] ---- Architectures may place restrictions on the expressions and statements diff --git a/p4-16/spec/grammar.adoc b/p4-16/spec/grammar.adoc index 7980b188cf..64f192461f 100644 --- a/p4-16/spec/grammar.adoc +++ b/p4-16/spec/grammar.adoc @@ -323,35 +323,48 @@ parserStates // tag::parserState[] parserState : optAnnotations STATE name - "{" parserStatements transitionStatement "}" + "{" parserStatOrDeclList transitionStatement "}" ; // end::parserState[] -// tag::parserStatements[] -parserStatements +// tag::parserStatementOrDeclaration[] +parserStatementOrDeclaration + : variableDeclaration + | constantDeclaration + | parserStatement + ; +// end::parserStatementOrDeclaration[] + +// tag::parserStatOrDeclList[] +parserStatOrDeclList : /* empty */ - | parserStatements parserStatement + | parserStatOrDeclList parserStatementOrDeclaration ; -// end::parserStatements[] +// end::parserStatOrDeclList[] // tag::parserStatement[] parserStatement : assignmentOrMethodCallStatement | directApplication | emptyStatement - | variableDeclaration - | constantDeclaration | parserBlockStatement - | conditionalStatement + | parserConditionalStatement ; // end::parserStatement[] // tag::parserBlockStatement[] parserBlockStatement - : optAnnotations "{" parserStatements "}" + : optAnnotations "{" parserStatOrDeclList "}" ; // end::parserBlockStatement[] +// tag::parserConditionalStatement[] +parserConditionalStatement + : IF "(" expression ")" parserStatement + | IF "(" expression ")" parserStatement ELSE parserStatement + ; +// end::parserConditionalStatement[] + // tag::transitionStatement[] transitionStatement : /* empty */