Support Parameters For Parsers
Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
@@ -18,3 +18,38 @@
|
||||
import Common
|
||||
|
||||
public struct Declaration {}
|
||||
|
||||
public struct Parameter: CustomStringConvertible {
|
||||
public var name: Identifier
|
||||
public var type: P4Type
|
||||
|
||||
public init(
|
||||
identifier: Identifier, withType type: P4Type
|
||||
) {
|
||||
self.name = identifier
|
||||
self.type = type
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "Parameter: \(self.name) with type \(self.type)"
|
||||
}
|
||||
}
|
||||
|
||||
public struct ParameterList: CustomStringConvertible {
|
||||
public var parameters: [Parameter]
|
||||
|
||||
public init(_ parameters: [Parameter]) {
|
||||
self.parameters = parameters
|
||||
}
|
||||
|
||||
public func addParameter(_ parameter: Parameter) -> ParameterList {
|
||||
return ParameterList(self.parameters + [parameter])
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
let parameters = self.parameters.map { parameter in
|
||||
parameter.description
|
||||
}.joined(separator: ";")
|
||||
return "Parameter list: \(parameters)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,12 +319,19 @@ public struct Parser: P4Type, P4Value {
|
||||
public var states: ParserStates
|
||||
|
||||
public var name: Identifier
|
||||
public var parameters: ParameterList?
|
||||
|
||||
public init(withName name: Identifier) {
|
||||
self.states = ParserStates()
|
||||
self.name = name
|
||||
}
|
||||
|
||||
public init(withName name: Identifier, withParameters parameters: ParameterList) {
|
||||
self.states = ParserStates()
|
||||
self.parameters = parameters
|
||||
self.name = name
|
||||
}
|
||||
|
||||
public func findStartState() -> ParserState? {
|
||||
for state in states.states {
|
||||
if state.state == Identifier(name: "start") {
|
||||
@@ -342,7 +349,8 @@ public struct Parser: P4Type, P4Value {
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "Parser"
|
||||
let parameters = self.parameters?.description ?? "N/A"
|
||||
return "Parser \(self.name) with parameters: \(parameters) and states: \(self.states)"
|
||||
}
|
||||
|
||||
public func def() -> any P4Value {
|
||||
|
||||
Reference in New Issue
Block a user