slang-rs 0.7.0

Rust bindings for the Slang Verilog parser
Documentation
// SPDX-License-Identifier: Apache-2.0

WHITESPACE = _{ " " | "\t" | "\n" | "\r" }

identifier = @{ (ASCII_ALPHANUMERIC | "_")+ }

full_identifier = @{ (ASCII_ALPHANUMERIC | "_" | ":")+ }

number = @{ ASCII_DIGIT+ }

range = { number ~ ":" ~ number }

packed_dimension = { "[" ~ range ~ "]" }

packed_dimensions = { packed_dimension* }

unpacked_dimensions = { packed_dimension* }

dimensions = { packed_dimensions ~ ( "$" ~ unpacked_dimensions )? }

signed_modifier = { "signed" }

logic_type = { ( "logic" | "reg" | "bit" ) ~ signed_modifier? ~ dimensions }

struct_type = { "struct" ~ ("packed")? ~ "{" ~ field_list ~ "}" ~ full_identifier ~ dimensions }

enum_type = { "enum" ~ "{" ~ variant_list ~ "}" ~ full_identifier ~ dimensions }

allowed_type = { logic_type | struct_type | enum_type }

field = { allowed_type ~ identifier }

field_list = { field ~ (";" ~ field)* ~ (";")? }

negative_sign = { "-" }

verilog_decimal = { negative_sign? ~ number ~ "'" ~ ("s")? ~ "d" ~ number }

variant = { identifier ~ "=" ~ verilog_decimal }

variant_list = { variant ~ ("," ~ variant)* ~ (";")? }

top = { allowed_type ~ EOI }