Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/h0tk3y/regex-grammar
Parsing methods hometask: top-down regex parser
https://github.com/h0tk3y/regex-grammar
Last synced: 9 days ago
JSON representation
Parsing methods hometask: top-down regex parser
- Host: GitHub
- URL: https://github.com/h0tk3y/regex-grammar
- Owner: h0tk3y
- Created: 2015-05-02T23:54:50.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-05-03T00:15:33.000Z (over 9 years ago)
- Last Synced: 2024-10-08T13:09:23.723Z (about 1 month ago)
- Language: Kotlin
- Size: 164 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
Awesome Lists containing this project
README
Regex grammar
===
![Parse tree](https://dl.dropboxusercontent.com/s/o07msz0g1f8a1nd/regex.png?dl=0)Использование:
===
Перед первым запуском:1) Установить graphviz или отдельно dot, обеспечить dot в PATH
2)gradlew installApp
Запуск:
run regex
Результат -- out.png с визуализированным деревом разбора
Исходная грамматика:
===S -> T
S -> T|S
T -> NX
T -> NXT
N -> c
N -> (S)
X -> ɛ
X -> *Нетерминалы:
---
S -- регулярное выражение
T -- подвыражение, имеющее вне скобок наименее приоритетный оператор с приоритетом выше, чем у выбора
N -- подвыражение без операторов вне скобок
X -- наличие или отсутствие оператора замыкания КлиниТерминалы
---
c -- отдельный символ
( ) | * -- в своём естественном значенииПреобразование грамматики к LL1
---Есть правое ветвление в правилах T -> NX, T -> NXT, устранение:
T -> NXD
D -> T
D -> ɛ
Есть правое ветвление в правилах S -> T, S -> T|S, устранение:S -> TZ
Z -> |S
Z -> ɛ
Грамматика с устранённым правым ветвлением
===S -> TZ
Z -> |S
Z -> ɛ
T -> NXD
D -> T
D -> ɛ
N -> c
N -> (S)
X -> ɛ
X -> *
Множества FIRST и FOLLOW
===|A |FIRST(A) |FOLLOW(A) |
|:---------:|:---------:|:---------------:|
|S |c, ( |$, ) |
|Z |ɛ, I |$, ) |
|T |c, ( |I, $, ) |
|D |ɛ, c, ( |I, $, ) |
|N |c, ( |c, (, *, I, $, ) |
|X |ɛ, * |c, (, I, $, ) |