Антон Толстов, aka Anaym, anton@tolstov.org
- .NET Fraemwork 4.7
FormalGrammar.exe [Имя входного файла] [Имя выходного файла]
Содержит правила грамматики вида Нетерминал Правая часть Все нетерминалы должны быть заглавным латинским символом. Все терминалы - непробельным символом и не заглавным латинским символом. После пустой строки можно перечислить произвольное число цепочек, состоящих из терминалов для анализа.
Содержит таблицу отношения предшествования. Левый болт - ^
, правй болт - $
Затем - тип грамматики: (S
для простого предшествования, W
для слабого, N
если ни то, ни другое)
После пустой строки - протокол разбора цепочек. До пробела отображается стек (голова справа), затем - неразобранная часть строки.
В случае ошибки разбора - error
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
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
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$
M XZ
Z y
X X
yyyy
M X Z y $
M . . . . >
X . . = <> .
Z . . . . >
y . . . . >
^ < < . . .
N