Анализатор формальных грамматик [простого предшествования]

Автор:

Антон Толстов, aka Anaym, anton@tolstov.org

Системные требования (минимальные и выше):

  • .NET Fraemwork 4.7

Запуск

FormalGrammar.exe [Имя входного файла] [Имя выходного файла]

Входной файл

Содержит правила грамматики вида Нетерминал Правая часть Все нетерминалы должны быть заглавным латинским символом. Все терминалы - непробельным символом и не заглавным латинским символом. После пустой строки можно перечислить произвольное число цепочек, состоящих из терминалов для анализа.

Выходной файл

Содержит таблицу отношения предшествования. Левый болт - ^, правй болт - $ Затем - тип грамматики: (S для простого предшествования, W для слабого, N если ни то, ни другое) После пустой строки - протокол разбора цепочек. До пробела отображается стек (голова справа), затем - неразобранная часть строки. В случае ошибки разбора - error

Примеры работы

1

S aASb
S d
A Ac
A c

acdb
acdc
  S A  a b c d $
S . .  . = . . >
A = .  < . = < .
a . <= . . < . .
b . .  . > . . >
c . .  > . > > .
d . .  . > . . >
^ < .  < . . < .
W

^ acdb$
^a cdb$
^ac db$
^aA db$
^aAd b$
^aAS b$
^aASb $
^S $
^S$ 

^ acdc$
^a cdc$
^ac dc$
^aA dc$
^aAd c$
error

2

E E+T
E T
T T*F
T F
F (E)
F x

x+x*(x+x)
x-x
x+xx
  E  T  F ( ) * + x $
E .  .  . . = . = . >
T .  .  . . > = > . >
F .  .  . . > > > . >
( <= <  < < . . . < .
) .  .  . . > > > . >
* .  .  = < . . . < .
+ .  <= < < . . . < .
x .  .  . . > > > . >
^ <  <  < < . . . < .
W

^ x+x*(x+x)$
^x +x*(x+x)$
^F +x*(x+x)$
^T +x*(x+x)$
^E +x*(x+x)$
^E+ x*(x+x)$
^E+x *(x+x)$
^E+F *(x+x)$
^E+T *(x+x)$
^E+T* (x+x)$
^E+T*( x+x)$
^E+T*(x +x)$
^E+T*(F +x)$
^E+T*(T +x)$
^E+T*(E +x)$
^E+T*(E+ x)$
^E+T*(E+x )$
^E+T*(E+F )$
^E+T*(E+T )$
^E+T*(E )$
^E+T*(E) $
^E+T*F $
^E+T $
^E $
^E$ 

^ x-x$
^x -x$
error

^ x+xx$
^x +xx$
^F +xx$
^T +xx$
^E +xx$
^E+ xx$
^E+x x$
error

3

S aSSb
S c

acaccbb
  S a b c $
S = < = < >
a = < . < .
b . > > > >
c . > > > >
^ < < . < .
S

^ acaccbb$
^a caccbb$
^ac accbb$
^aS accbb$
^aSa ccbb$
^aSac cbb$
^aSaS cbb$
^aSaSc bb$
^aSaSS bb$
^aSaSSb b$
^aSS b$
^aSSb $
^S $
^S$ 

4

M XZ
Z y
X X

yyyy
  M X Z y  $
M . . . .  >
X . . = <> .
Z . . . .  >
y . . . .  >
^ < < . .  .
N