Parser wyrażeń regularnych

0

Piszę parser wyrażeń regularnych. Potrzebuję stworzyć odpowiednik nawiasów klamrowych, czyli zakresu wystąpień jakiegoś elementu. Jak rozwiązać to najoptymalniej?
Niby można to potraktować w ten sposób:

x{1,5} == x|(xx)|(xxx)|(xxxx)|(xxxx)

Ale dla dużych wartości wygeneruje to dość złożoną maszynę stanów. Jest może jakieś lepsze rozwiązanie?

0
Karolaq napisał(a):

Ale dla dużych wartości wygeneruje to dość złożoną maszynę stanów.

  1. A widziałaś w realnym świecie coś co wymaga {1,50} ? Więc jak ktoś takie coś wpiszę to pewnie potrzebuje takiej dużej maszyny.
  2. Co cię obchodzi rozmiar maszyny? Po determinizacji i minimalizacji prawdopodobnie niektóre stany tak czy owak nigdy nie zostaną użyte.
0

@_13th_Dragon: Każdy stan parsera odpowiada jednemu stanowi (inputowi) użytkownika. Nie zapominaj o tym.

0

@pixelplus
Po pierwsze, w związku z tym że cały automat stanowi graf skierowany w którym przeważnie zdarzają się pętli to stanów jest jednak jest mniej niż możliwości "inputa" użytkownika.
Po drugie, nie każdy stan tego grafu musi zostać uaktywniony podczas analizy konkretnego zdania wprowadzonego przez użytkownika.
W związku z czym proszę o wyjaśnienie co to za chrzan:

pixelplus napisał(a):

Każdy stan parsera odpowiada jednemu stanowi (inputowi) użytkownika.
i o czym konkretnie zapomniałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1