писал я тут генератор лексических анализаторов (интерпретируемых) и ast, строго для выявления выходов за пределы лимитов. заданных изначально для каких-то там выражений. всё сделал кроме последнего (потерял мотивацию?). лето опустошения, ощутил урон к тому же, когда девушка меня назвала дядей женей - не сразу откликнулся, но оказалось что ей нужно купить пиво. солнце так напекло мне голову, что я и забыл, что вы не умеете (в основном) управлять командной строкой - читай заложники графического интерфейса господина гейтса - згигг; или лучше просто: зиг. потому что вы даже не сможете распаковать архив, не то что скомпилировать содержимое; казалось бы, обычный с89 (в виндовсе? - упаси боже! это качать мингв чтоли...) а такие трудности перевода. впрочем я и не ожидаю фидбека, настроения нет под нахлынувшие холода. как переход времён года в донт старв тугезер - обрубило у нас в городе, с 34 до 20 и пришлось натянуть носки на голые ступни.
https://disk.yandex.com/d/8LoHQNIk-1Wl7Q
ниже как выглядит конфиг анализа самого себя (да, это почти лисп)
falexit - генератор лексических анализаторов
falexit - генератор лексических анализаторов
Последний раз редактировалось lenin1st 07 сен 2022, 09:33, всего редактировалось 1 раз.
Код: Выделить всё
(d c-like-lit (s 0x31-0x39 1-1 (s 0x30-0x39 -))
(w 0 (s 0x30-0x39 1-)
(w x (s 0x30-0x39 0x61-0x66 0x41-0x56 1-))
(w b (s 0x30-0x31 1-))
(t)))
(d space (s 0x00-0x20 1-))
(d space-strip (space (t space (space))))
(d space-catch (space (t space)))
(d if-not-a-char (s 0x00-0x20 0x28-0x29 1-1 (r)))
(d strange-word (s 0x00-0x27 0x2a-0xff 1-))
(d any-word-1 (s 0x21-0x27 0x2a-0x5b 0x5d-0xff 1-)
(w \\ (s 0x0-0x20 1-1)
(w \\ \( \))))
(d any-word-0 (any-word-1 (any-word-0))
(t))
(d any-word (any-word-1 (any-word-0)))
(d comm-s-2 (w - (t nan (c-like-lit (t number))
(t nan)))
(c-like-lit (t number (w - (t space (c-like-lit (t number))
(t nan))))))
(d comm-s-1 (space-catch (comm-s-2)))
(d comm-s-0 (comm-s-1 (comm-s-0)) (t))
(d comm-s (comm-s-1 (comm-s-1 (comm-s-0)))
(e comm-s : at least two range expected))
(d comm-w-1 (space-catch (any-word (t word))))
(d comm-w-0 (comm-w-1 (comm-w-0)) (t))
(d comm-w (comm-w-1 (comm-w-0))
(e comm-w : at least one word expected))
(d comm-t (space-strip)
(any-word (t word)))
(d comm-r (t))
(d comm-e (space-strip)
(strange-word (t word))
(t))
(d comm-call (any-word (t word)))
(d comm-next-0 (space-strip)
(w \( (comm-next (comm-next-0)))
(w \) (t frame-end))
(e unexpected symbol))
(d comm-no-nesting (space-strip)
(w \) (t frame-end))
(e unexpected symbol))
(d comm-next (w s (if-not-a-char (t comm-s (comm-s (comm-next-0)))))
(w w (if-not-a-char (t comm-w (comm-w (comm-next-0)))))
(w t (if-not-a-char (t comm-t (comm-t (comm-next-0)) (comm-no-nesting))))
(w r (if-not-a-char (t comm-r (comm-r (comm-no-nesting)))))
(w e (if-not-a-char (t comm-e (comm-e (comm-no-nesting)))))
(w d (if-not-a-char (e comm-d : declaration outside global scope)))
(t comm-call (comm-call (comm-next-0)))
(e unexpected symbol))
(d comm-d (space-strip)
(any-word (t word (w \) (e comm-d : body is empty))
(t)))
(e comm-d : unnamed))
(space-strip)
(w \(d (if-not-a-char (t comm-d (comm-d (comm-next-0)))))
(w \( (comm-next))