Flesh Out P4 Grammar

Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
Will Hawkins
2026-01-17 00:02:43 -05:00
parent 08beba6cb1
commit c78afa5418
5 changed files with 360 additions and 33 deletions
+37 -12
View File
@@ -2,24 +2,34 @@
Parser (No Parameters)
=========================
parser simple() {
state testing {}
}
state start {
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserTypeDeclaration
(parserType
(parser)
parser_name: (identifier)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
@@ -28,28 +38,43 @@ parser simple() {
Parser (Parameters)
=========================
parser imple(bool pname) {
state testing {}
}
state start {
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserTypeDeclaration
(parserType
(parser)
(identifier)
(nonEmptyParameterList
(parameterList
(parameter
(typeRef
(baseType
(bool)))
(identifier))))
(bool)
)
)
(identifier)
)
)
)
(parserStates
(parserState
(state)
(identifier)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
+187
View File
@@ -0,0 +1,187 @@
=========================
Simple If Statement (No Else)
=========================
parser simple() {
state start {
if (true) {
};
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserStatements
(parserStatement
(conditionalStatement
(if)
(expression
(true)
)
(statement
(blockStatement)
)
)
)
(semicolon)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
=========================
Simple If Statement (Else)
=========================
parser simple() {
state start {
if (true) {
} else {
};
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserStatements
(parserStatement
(conditionalStatement
(if)
(expression
(true)
)
(statement
(blockStatement)
)
(else)
(statement
(blockStatement)
)
)
)
(semicolon)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
=========================
Simple If Statement (With Body)
=========================
parser simple() {
state start {
if (true) {
true;
} else {
false;
};
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserStatements
(parserStatement
(conditionalStatement
(if)
(expression
(true)
)
(statement
(blockStatement
(statements
(statement
(expressionStatement
(expression
(true)
)
)
)
(semicolon)
)
)
)
(else)
(statement
(blockStatement
(statements
(statement
(expressionStatement
(expression
(false)
)
)
)
(semicolon)
)
)
)
)
)
(semicolon)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
@@ -0,0 +1,88 @@
=========================
Simple Transition Statement (To Identifier)
=========================
parser simple() {
state start {
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
(semicolon)
)
)
=========================
Simple Transition Statement (To Select Expression)
=========================
parser simple() {
state start {
transition select (se) {
true: next_state;
};
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(selectExpression
(select)
(expression
(identifier)
)
(selectBody
(selectCase
(keysetExpression
(expression
(true)
)
)
(colon)
(identifier)
)
(semicolon)
)
)
)
)
(semicolon)
)
)
)
(semicolon)
)
)