Initial Support For If Statements

Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
Will Hawkins
2026-02-24 04:38:05 -05:00
parent 3752dd01ab
commit a2335a01ed
9 changed files with 541 additions and 46 deletions
+207
View File
@@ -173,3 +173,210 @@ parser simple() {
(semicolon)
)
=========================
Simple Conditional Statement
=========================
parser simple() {
state start {
bool x = true;
if (x) {
x = false;
};
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserLocalElements
(parserLocalElement
(variableDeclaration
(typeRef
(baseType
(bool)
)
)
(identifier)
(assignment)
(expression
(true)
)
)
)
(semicolon)
)
(parserStatements
(parserStatement
(conditionalStatement
(if)
(expression
(identifier)
)
(statement
(blockStatement
(statements
(statement
(assignmentStatement
(expression
(identifier)
)
(assignment)
(expression
(false)
)
)
)
(semicolon)
)
)
)
)
)
(semicolon)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
)
(semicolon)
)
=========================
Simple Conditional Statement (with else)
=========================
parser simple() {
state start {
bool x = true;
int y = 0;
if (x) {
y = 1;
} else {
y = 2;
};
transition accept;
}
};
---
(p4program
(declaration
(parserDeclaration
(parserType
(parser)
(identifier)
)
(parserStates
(parserState
(state)
(identifier)
(parserLocalElements
(parserLocalElement
(variableDeclaration
(typeRef
(baseType
(bool)
)
)
(identifier)
(assignment)
(expression
(true)
)
)
)
(semicolon)
(parserLocalElement
(variableDeclaration
(typeRef
(baseType
(int)
)
)
(identifier)
(assignment)
(expression
(integer)
)
)
)
(semicolon)
)
(parserStatements
(parserStatement
(conditionalStatement
(if)
(expression
(identifier)
)
(statement
(blockStatement
(statements
(statement
(assignmentStatement
(expression
(identifier)
)
(assignment)
(expression
(integer)
)
)
)
(semicolon)
)
)
)
(else)
(statement
(blockStatement
(statements
(statement
(assignmentStatement
(expression
(identifier)
)
(assignment)
(expression
(integer)
)
)
)
(semicolon)
)
)
)
)
)
(semicolon)
)
(parserTransitionStatement
(transition)
(transitionSelectionExpression
(identifier)
)
)
(semicolon)
)
)
)
)
(semicolon)
)