Comments 14
> Если вообще ничего не совпало, то мы рапортуем об ошибке и скрипт становится героем.
У автора в оригинале нет идиоматики, почему она есть в переводе: о каком герое речь?
У автора в оригинале нет идиоматики, почему она есть в переводе: о каком герое речь?
0
Если не критично совсем уж с нуля, существует проект PLY (Python Lex-Yacc).
На одном из курсов Udacity на его основе создают простейший браузер.
На одном из курсов Udacity на его основе создают простейший браузер.
+1
Надо написать на IMP какой-нибудь ещё интерпретатор, чтобы глубже было.
+2
Если будет интересно, переведу еще 3 части из этой же серии.
+3
Забавно. Совсем недавно написал почти такую же статью, только с более практичной целью.
+1
По моему лучше не читать весь файл сразу, а анализировать его построчно. Для компилятор/парсера latex это помогало мне работать с большими файлами.
0
Больше спасибо за статью, обязательно прочитаю и все остальные части.
Тема очень интересная и я в свободное время ей занимаюсь.
Когда-то я писал движок вики-подобного языка разметки. Первая ошибка, которую я допустил было смешивание уровней токенизации и построения дерева из последовательности токенов (т.е. tokenizer / lexer). Полученная штука была жутковатой, в частности, её было сложно модифицировать, было множество специальных кейсов, введение новых синтаксисов вводило новые специальные кейсы и ломало работу уже существующих.
Потом я писал шаблонизатор, в нём я осуществил разбивку этих двух этапов, в результате код стал очень простой и здоровый. Собственно, этот шаг мне видится разумным, но есть один связанный вопрос, который меня занимает.
Предположим у нас есть некоторый ЯП. Что считать токеном? Пусть в ЯП есть литералы строк: набор символов заключённых в двойные кавычки. По сути, это может быть один токен, который достаточно легко описать одной регуляркой (если регулярки поддерживают ленивость). Но если пойти дальше, то оказывается, что внутри строки тоже не всё так просто, могут быть эскейп последовательности, существует интерполяция. НО при этом внутри строки не действуют обычные токены языка. То есть внутри строки нет for, if, нет чисел и нет других строк. И ещё там важны пробелы, т.е. это значащие символы. Это означает, что токен строки это отдельный подъязык со своей грамматикой.
Получается, что на этапе токенизации мы должны заморачиваться с каким-то переключением контекста итп вещами, хотя этот этап должен быть очень простым. Налицо анализ последовательности токенов. То есть уровни всё таки как-то проникают друг в друга!? Мой вопрос в том, как разрешается это затруднение? Где кончается токенизация и начинается синтаксический анализ?
Заранее спасибо.
Тема очень интересная и я в свободное время ей занимаюсь.
Когда-то я писал движок вики-подобного языка разметки. Первая ошибка, которую я допустил было смешивание уровней токенизации и построения дерева из последовательности токенов (т.е. tokenizer / lexer). Полученная штука была жутковатой, в частности, её было сложно модифицировать, было множество специальных кейсов, введение новых синтаксисов вводило новые специальные кейсы и ломало работу уже существующих.
Потом я писал шаблонизатор, в нём я осуществил разбивку этих двух этапов, в результате код стал очень простой и здоровый. Собственно, этот шаг мне видится разумным, но есть один связанный вопрос, который меня занимает.
Предположим у нас есть некоторый ЯП. Что считать токеном? Пусть в ЯП есть литералы строк: набор символов заключённых в двойные кавычки. По сути, это может быть один токен, который достаточно легко описать одной регуляркой (если регулярки поддерживают ленивость). Но если пойти дальше, то оказывается, что внутри строки тоже не всё так просто, могут быть эскейп последовательности, существует интерполяция. НО при этом внутри строки не действуют обычные токены языка. То есть внутри строки нет for, if, нет чисел и нет других строк. И ещё там важны пробелы, т.е. это значащие символы. Это означает, что токен строки это отдельный подъязык со своей грамматикой.
Получается, что на этапе токенизации мы должны заморачиваться с каким-то переключением контекста итп вещами, хотя этот этап должен быть очень простым. Налицо анализ последовательности токенов. То есть уровни всё таки как-то проникают друг в друга!? Мой вопрос в том, как разрешается это затруднение? Где кончается токенизация и начинается синтаксический анализ?
Заранее спасибо.
0
Only those users with full accounts are able to leave comments. Log in, please.
Простой интерпретатор с нуля на Python (перевод) #1