By adding an expected type to the compilation context, it is now possible for type checking to occur on keyset expressions and return statements at the moment that they are being compiled. Previously, it was necessary to tentatively compile them and then typecheck afterward. Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
P4RSE: P4 Runtime In Swift Environment
P4RSE (yes, the acronym is a bit forced) is a P4 parser and runtime written in Swift. The project was started as a means to better learn Swift.
Status
Very, very alpha:
- Limited parts of the language can be parsed.
- Limited programs can be evaluated.
As an example of what can be parsed and evaluated, here is a fairly complex P4 program cobbled together from our unit tests:
control simple(bool x, bool y) {
action a(int z) {
z = false;
}
table t {
key = {
x: exact;
y: exact;
}
}
};
struct Testing {
bool yesno;
int count;
};
parser main_parser() {
state start {
Testing ts;
ts.count = 1;
transition select (ts.count) {
0: accept;
_: reject;
};
}
};
Please check back often!
Building
Requirements And Basic Build
This project uses code item macros (CodeItemMacros) which
are an experimental feature in Swift and not available in production.
Therefore, to compile this project, you must be using a non-production version of the compiler.
With that caveat noted, building can be done with swift build:
$ swift build
Contributing
We would love your help! Contributions are very welcome!
Coding Style
Here are the style guidelines that we are trying to maintain:
- variables are in
snake_case. - types are in
CamelCase.
Of course, we want to follow the formatter, too: see below.
Testing
To run the P4RSE tests:
$ swift test
To run the parser tests, from the tree-sitter-p4 directory:
$ npx tree-sitter test
Generating Documentation
To build the documentation:
$ swift package generate-documentation
To preview the generated documentation:
$ swift package swift package --disable-sandbox preview-documentation --target <some target>
For more information, see the documentation for the Swift-DocC plugin.
Checking Format
To check the format:
$ swift-format --recursive -i Sources/