Compare commits

...

2 Commits

Author SHA1 Message Date
Will Hawkins e17533dfc8 Make Formatter Happy
Continuous Integration / Grammar Tests (push) Successful in 36s
Continuous Integration / Library Format Tests (push) Successful in 1m19s
Continuous Integration / Library Tests (push) Successful in 3m51s
Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
2026-06-12 06:34:57 -04:00
Will Hawkins fe88e447a9 compiler: Add LICENSE to Visitor.swift
Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
2026-06-12 06:31:21 -04:00
7 changed files with 54 additions and 24 deletions
+9 -9
View File
@@ -140,16 +140,16 @@ extension Cli {
return
}
/*
let maybe_codegen = P4Runtime.CodeGenerator().codeGen(program)
guard case .Ok(let codegen) = maybe_codegen else {
let formatter = FormatterAnsi()
print(ErrorWithLabel("Code Generation Error", maybe_codegen.error()!).format(formatter))
return
}
/*
let maybe_codegen = P4Runtime.CodeGenerator().codeGen(program)
guard case .Ok(let codegen) = maybe_codegen else {
let formatter = FormatterAnsi()
print(ErrorWithLabel("Code Generation Error", maybe_codegen.error()!).format(formatter))
return
}
print("\(codegen.getGeneratedCode())")
*/
print("\(codegen.getGeneratedCode())")
*/
}
}
}
+7 -4
View File
@@ -309,7 +309,10 @@ public struct AST {
public var tipe: AST.Identifier
public let arguments: AST.ArgumentList
public init(named name: AST.Identifier, withType tipe: AST.Identifier, withArguments arguments: AST.ArgumentList) {
public init(
named name: AST.Identifier, withType tipe: AST.Identifier,
withArguments arguments: AST.ArgumentList
) {
self.name = name
self.arguments = arguments
self.tipe = tipe
@@ -643,7 +646,9 @@ public struct ASTCompilerContext {
public let lexical_context_statements: [AST.AnStatement]?
public let extern_context: Bool
public init(_ name: AST.Identifier? = .none, _ stmts: [AST.AnStatement]? = .none, _ extern: Bool = false) {
public init(
_ name: AST.Identifier? = .none, _ stmts: [AST.AnStatement]? = .none, _ extern: Bool = false
) {
self.lexical_context_name = name
self.lexical_context_statements = stmts
self.extern_context = extern
@@ -661,5 +666,3 @@ public struct ASTCompilerContext {
return ASTCompilerContext(self.lexical_context_name, self.lexical_context_statements, extern)
}
}
+7 -4
View File
@@ -93,7 +93,8 @@ extension AST.FunctionDeclaration: Compilable {
sourceLocation: function_declaration_node.toSourceLocation(),
withError: "Missing function declaration component")))
let maybe_function_name = AST.Identifier.CompileExpression(node: current_node!, withContext: context)
let maybe_function_name = AST.Identifier.CompileExpression(
node: current_node!, withContext: context)
guard case .Ok(let function_name) = maybe_function_name else {
return .Error(maybe_function_name.error()!)
}
@@ -476,9 +477,11 @@ extension AST.Control: Compilable {
))
}
return .Ok(AST.Control(
named: control_name as! AST.Identifier, withParameters: control_parameters, withTable: tables[0],
withActions: AST.Actions(withActions: actions), withApply: apply))
return .Ok(
AST.Control(
named: control_name as! AST.Identifier, withParameters: control_parameters,
withTable: tables[0],
withActions: AST.Actions(withActions: actions), withApply: apply))
}
}
+2 -1
View File
@@ -133,7 +133,8 @@ extension AST.Expression: Compilable {
let expression_parsers: [CompilableExpression.Type] = [
P4BooleanValue.self, P4StringValue.self, P4IntValue.self, AST.Identifier.self,
AST.BinaryOperatorExpression.self, AST.ArrayAccessExpression.self, AST.FieldAccessExpression.self,
AST.BinaryOperatorExpression.self, AST.ArrayAccessExpression.self,
AST.FieldAccessExpression.self,
AST.FunctionCall.self,
]
+4 -2
View File
@@ -39,7 +39,8 @@ extension AST.Statement: Compilable {
"assignmentStatement": AST.ParserAssignmentStatement.self,
"expressionStatement": AST.ExpressionStatement.self,
"variableDeclaration": AST.VariableDeclarationStatement.self,
"conditionalStatement": AST.ConditionalStatement.self, "blockStatement": AST.BlockStatement.self,
"conditionalStatement": AST.ConditionalStatement.self,
"blockStatement": AST.BlockStatement.self,
"return_statement": AST.ReturnStatement.self,
]
guard let parser = statementParsers[statement.nodeType ?? ""] else {
@@ -176,7 +177,8 @@ extension AST.ParserState: Compilable {
sourceLocation: node.toSourceLocation(),
withError: "Missing transition statement of state declaration")))
let updated_context = context.update(withContextName: (state_identifier as! AST.Identifier)).update(withContextStatements: parsed_s)
let updated_context = context.update(withContextName: (state_identifier as! AST.Identifier))
.update(withContextStatements: parsed_s)
return AST.TransitionStatement.Compile(node: current_node!, withContext: updated_context)
}
+6 -2
View File
@@ -61,7 +61,11 @@ public protocol ASTVisitor<T> {
func visit(node: AST.Identifier, driver: ASTVisitorDriver, context: T) -> Result<T>
func visit(node: AST.Parser, driver: ASTVisitorDriver, context: T) -> Result<T>
func visit(node: AST.ParserStateDirectTransition, driver: ASTVisitorDriver, context: T) -> Result<T>
func visit(
node: AST.ParserStateDirectTransition, driver: ASTVisitorDriver, context: T
) -> Result<T>
func visit(node: AST.ParserStateNoTransition, driver: ASTVisitorDriver, context: T) -> Result<T>
func visit(node: AST.ParserStateSelectTransition, driver: ASTVisitorDriver, context: T) -> Result<T>
func visit(
node: AST.ParserStateSelectTransition, driver: ASTVisitorDriver, context: T
) -> Result<T>
}
+17
View File
@@ -1,3 +1,20 @@
// p4rse, Copyright 2026, Will Hawkins
//
// This file is part of p4rse.
//
// This file is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import Common
public struct ASTVisitorDriver {