Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yuma140902/regend


https://github.com/yuma140902/regend

Last synced: 8 days ago
JSON representation

Awesome Lists containing this project

README

        

# regend

入力された正規表現をNFA、DFAに変換します。

![image](https://github.com/yuma140902/regend/assets/23431077/3762e771-07e0-4183-9a0d-a5131ac622bd)

## インストール方法

```sh
cargo install --git https://github.com/yuma140902/regend/
```

Webフロントエンドもあります: [Regend WebUI](https://yuma14.net/regend-webui/)

## 使用方法

```sh
regend 正規表現
```

## 正規表現の文法

regendで使用する正規表現の文法は以下の通りです。

```
:= [ '|' ]*
:= [ ]*
:= [ '*' ]?
:= '(' ')'
| '0'~'9' | 'a'~'z' | 'A'~'Z'
| 'φ'
```

なお、空白は無視されるので読みやすいように好きな場所に入れることができます。

## 正規表現の意味論

- `φ` - 何も受理しない
- `0`~`9`, `a`~`z`, `A`~`Z` - その1文字を表す
- A`|`B - 正規表現Aと正規表現Bの選択
- AB - 正規表現Aと正規表現Bの連接
- A`*` - 正規表現Aの0回以上の繰り返し

優先順位は繰り返し、連接、選択の順に高いです。`(` `)`を使用すると優先順位を変えることができます。

以下のようなよくある糖衣構文は実装していません。かわりに矢印で示した表記を使ってください。

- 空文字列 → `φ*`
- A`?` - 正規表現Aが0回または1回出現する → `(φ*|`A`)`
- A`+` - 正規表現Aの1回以上の繰り返し → AA`*`

## テスト機能について

テスト機能を使用すると、正規表現を変換したDFAが、ある文字列を受理するかどうか調べることができます。

1. `hoge.txt`にテストしたい文字列を入力します。複数テストする場合は改行して1行に1つの文字列を書きます。

2. `regend 正規表現 -t hoge.txt`を実行します。受理されたら緑色で`Accepted`、不受理なら赤色で`Rejected`と表示されます。