Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

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

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, $, ) |