## 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: 1. Limited parts of the language can be parsed. 2. Limited programs can be evaluated. As an example of what can be parsed and evaluated, here is a fairly complex P4 program from our unit tests: ```P4 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`)](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0397-freestanding-declaration-macros.md#future-directions) which are an experimental feature in Swift and not [_available in production_](https://github.com/swiftlang/swift/blob/1ba5ae105876b15914688cdf8431fd390651296e/include/swift/Basic/Features.def). 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`: ```console $ 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](#checking-format). #### Testing To run the P4RSE tests: ```console $ swift test ``` To run the parser tests, from the `tree-sitter-p4` directory: ```console $ npx tree-sitter test ``` #### Generating Documentation To build the documentation: ```console $ swift package generate-documentation ``` To preview the generated documentation: ```console $ swift package swift package --disable-sandbox preview-documentation --target ``` For more information, see the [documentation for the Swift-DocC plugin](https://swiftlang.github.io/swift-docc-plugin/documentation/swiftdoccplugin/). #### Checking Format To check the format: ```console $ swift-format --recursive -i Sources/ ```