Size: a a a

2020 March 19

AP

Alex Peresmeshnik in Lisp Forever
Alex Peresmeshnik
Ну смотри, тот же распространенный вариант парсера на питоне: https://norvig.com/lispy.html

>>> program = "(begin (define r 10) (* pi (* r r)))"
>>> tokenize(program)
['(', 'begin', '(', 'define', 'r', '10', ')', '(', '*', 'pi', '(', '*', 'r', 'r', ')', ')', ')']
Пишется как два пальца об асфальт, но конечно же не учитывает конструкций типа (display "I am string with whitespace")
источник

VM

Vyacheslav Mikushev in Lisp Forever
Добавить к нему строки.:)
источник

AP

Alex Peresmeshnik in Lisp Forever
поэтому строки придется добавлять либо в самом лиспе, через костыль, либо в компилятор
источник

VM

Vyacheslav Mikushev in Lisp Forever
Я предполагаю, что строки должны быть в компиляторе. Но у меня в этом плане мало опыта.
источник

AP

Alex Peresmeshnik in Lisp Forever
Vyacheslav Mikushev
Добавить к нему строки.:)
Вот об том и вопрос универсальности парсера, что надо учитывать, что вообще может возникнуть в строке, что нужно предусмотреть, чтобы строку разбить на правильные токены
источник

A

Aragaer in Lisp Forever
мне не нравится идея про "разбивать"
источник

A

Aragaer in Lisp Forever
надо последовательно читать токены и вобщем все
источник

AP

Alex Peresmeshnik in Lisp Forever
Aragaer
надо последовательно читать токены и вобщем все
Посимвольно?
источник

A

Aragaer in Lisp Forever
ну собссно да, машинка по "вычитыванию токенов" так и работает. Смотрит на символ. Делает из этого вывод, как поменять свой стейт - "нашелся токен", "ищем токен", "в середине токена" и так далее
источник

AP

Alex Peresmeshnik in Lisp Forever
Можно сделать конечным автоматом в зависимости от символа и предыдущего состояния конечного автомата
источник

A

Aragaer in Lisp Forever
ну да, так обычно и делается
источник

A

Aragaer in Lisp Forever
все равно же где-то в самом низу будет проход посимвольный.
источник

AP

Alex Peresmeshnik in Lisp Forever
но опять вопрос какой минимум парсить? )
источник

A

Aragaer in Lisp Forever
мне вот интересно, как реализуется привязка ридер макро
источник

AP

Alex Peresmeshnik in Lisp Forever
() " ' , и все?
источник

A

Aragaer in Lisp Forever
ну еще ` и , и @
источник

A

Aragaer in Lisp Forever
но по-моему даже ' это уже через ридер макро реализовано
источник

AP

Alex Peresmeshnik in Lisp Forever
Aragaer
ну еще ` и , и @
и # ?
источник

A

Aragaer in Lisp Forever
возможно, да
источник

AP

Alex Peresmeshnik in Lisp Forever
Aragaer
но по-моему даже ' это уже через ридер макро реализовано
Хочется дотошно это дело разобрать, но простой краткой выжимки не вижу, в большинстве случаев отсылки к высокоуровневым языкам и как следствие недокомпиляторы с отсылкой "ну тут еще не учтено «пожелания»" или безумное нашромождение кода, типа проверки строки для парсера регекспами
источник