falexit - генератор лексических анализаторов

Ответить
lenin1st
Сообщения: 84
Зарегистрирован: 02 фев 2022, 10:15

falexit - генератор лексических анализаторов

Сообщение lenin1st »

писал я тут генератор лексических анализаторов (интерпретируемых) и ast, строго для выявления выходов за пределы лимитов. заданных изначально для каких-то там выражений. всё сделал кроме последнего (потерял мотивацию?). лето опустошения, ощутил урон к тому же, когда девушка меня назвала дядей женей - не сразу откликнулся, но оказалось что ей нужно купить пиво. солнце так напекло мне голову, что я и забыл, что вы не умеете (в основном) управлять командной строкой - читай заложники графического интерфейса господина гейтса - згигг; или лучше просто: зиг. потому что вы даже не сможете распаковать архив, не то что скомпилировать содержимое; казалось бы, обычный с89 (в виндовсе? - упаси боже! это качать мингв чтоли...) а такие трудности перевода. впрочем я и не ожидаю фидбека, настроения нет под нахлынувшие холода. как переход времён года в донт старв тугезер - обрубило у нас в городе, с 34 до 20 и пришлось натянуть носки на голые ступни.

https://disk.yandex.com/d/8LoHQNIk-1Wl7Q

ниже как выглядит конфиг анализа самого себя (да, это почти лисп)
Последний раз редактировалось lenin1st 07 сен 2022, 09:33, всего редактировалось 1 раз.
lenin1st
Сообщения: 84
Зарегистрирован: 02 фев 2022, 10:15

Сообщение lenin1st »

Код: Выделить всё

(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))
lenin1st
Сообщения: 84
Зарегистрирован: 02 фев 2022, 10:15

Сообщение lenin1st »

а да, я навыёбывался, но даже и cli интерфейс не сделал. потому что лень.
Ответить