Распределенные сканеры против централизованных
Распределенные сканеры против централизованных
Структура лексического анализатора, которую я только что вам показал, весьма стандартна и примерно 99% всех компиляторов используют что-то очень близкое к ней. Это, однако, не единственно возможная структура, или даже не всегда самая лучшая.
Проблема со стандартным подходом состоит в том, что сканер не имеет никаких сведений о контексте. Например, он не может различить оператор присваивания "=" и оператор отношения "=" (возможно именно поэтому и C и Паскаль используют для них различные строки). Все, что сканер может сделать, это передать оператор синтаксическому анализатору, который может точно сказать исходя из контекста, какой это оператор. Точно так же, ключевое слово «IF» не может быть посредине арифметического выражения, но если ему случится оказаться там, сканер не увидит в этом никакой проблемы и возвратит его синтаксическому анализатору, правильно закодировав как «IF».
С таким подходом, мы в действительности не используем всю информацию, имеющуюся в нашем распоряжении. В середине выражения, например, синтаксический анализатор «знает», что нет нужды искать ключевое слово, но он не имеет никакой возможности сказать это сканеру. Так что сканер продолжает делать это. Это, конечно, замедляет компиляцию.
В настоящих компиляторах проектировщики часто принимают меры для передачи подробной информации между сканером и парсером, только чтобы избежать такого рода проблем. Но это может быть неуклюже и, конечно, уничтожит часть модульности в структуре компилятора.
Альтернативой является поиск какого-то способа для использования контекстной информации, которая исходит из знания того, где мы находимся в синтаксическом анализаторе. Это возвращает нас обратно к понятию распределенного сканера, в котором различные части сканера вызываются в зависимости от контекста.
В языке KISS, как и большинстве языков, ключевые слова появляются только в начале утверждения. В таких местах, как выражения они запрещены. Также, с одним небольшим исключением (многосимвольные операторы отношений), которое легко обрабатывается, все операторы односимвольны, что означает, что нам совсем не нужен GetOp.
Так что, оказывается, даже с многосимвольными токенами мы все еще можем всегда точно определить вид лексемы исходя из текущего предсказывающего символа, исключая самое начало утверждения.
Даже в этой точке, единственным видом лексемы, который мы можем принять, является идентификатор. Нам необходимо только определить, является ли этот идентификатор ключевым словом или левой частью оператора присваивания.
Тогда мы заканчиваем все еще нуждаясь только в GetName и GetNum, которые используются так же, как мы использовали их в ранних главах.
Сначала вам может показаться, что это шаг назад и довольно примитивный способ. Фактически же, это усовершенствование классического сканера, так как мы используем подпрограммы сканирования только там, где они действительно нужны. В тех местах, где ключевые слова не разрешены, мы не замедляем компиляцию, ища их.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Распределенные базы данных
Распределенные базы данных AS/400 позволяет прикладной программе работать с базой данных как на локальной, так и на удаленной системе; местоположение данных для приложения прозрачно. Это означает, что приложению доступна обработка файла базы данных без информации о том,
ГЛАВА 13. РАСПРЕДЕЛЕННЫЕ СИСТЕМЫ
ГЛАВА 13. РАСПРЕДЕЛЕННЫЕ СИСТЕМЫ В предыдущей главе нами были рассмотрены сильносвязанные многопроцессорные системы с общей памятью, общими структурами данных ядра и общим пулом, из которого процессы вызываются на выполнение. Часто, однако, бывает желательно в целях
13.3 "ПРОЗРАЧНЫЕ" РАСПРЕДЕЛЕННЫЕ ФАЙЛОВЫЕ СИСТЕМЫ
13.3 "ПРОЗРАЧНЫЕ" РАСПРЕДЕЛЕННЫЕ ФАЙЛОВЫЕ СИСТЕМЫ Термин "прозрачное распределение" означает, что пользователи, работающие на одной машине, могут обращаться к файлам, находящимся на другой машине, не осознавая того, что тем самым они пересекают машинные границы, подобно
Распределенные транзакции
Распределенные транзакции Еще одним способом инициирования транзакции является подключение сессии к координатору распределенных транзакций. В общих чертах, координатор представляет собой сессию, транслирующую вызовы собственных интерфейсов управления транзакциией
2.3.3.2 Распределенные соединения
2.3.3.2 Распределенные соединения Enterprise Gateway может участвовать в распределенных соединениях, координируемых сервером баз данных INFORMIX. Это позволяет импортировать в базы данных INFORMIX и/или интегрировать с ними данные из разнородных внешних источников.
Глава 3. Листовые сканеры
Глава 3. Листовые сканеры По принципу действия эти устройства напоминают факс-аппараты. Считываемая страница с помощью специального механизма протягивается мимо головки. Протяжный сканер может оснащаться лотком для автоматической подачи листов, что существенно
Глава 4. Планшетные сканеры
Глава 4. Планшетные сканеры Устройства ввода этого типа чем-то напоминают «ксероксы»: считываемый документ располагается на поверхности стеклянной пластины, под которой перемещается сканирующая головка. Такие сканеры являются универсальными, поскольку с их помощью
Глава 5. Слайд-сканеры
Глава 5. Слайд-сканеры Для качественного считывания изображений со слайдов существуют специальные сканеры. Поскольку они работают с оригиналами небольшого размера, а полученные изображения в дальнейшем приходится многократно увеличивать, у этих устройств очень
Глава 6. Барабанные сканеры
Глава 6. Барабанные сканеры До появления и распространения настольных сканеров с приемлемым качеством эти устройства практически повсеместно использовались для ввода изображений при допечатной подготовке изданий. Барабанные сканеры и по сегодняшний день дороги и
Сканеры портов
Сканеры портов Специализация утилит для сканирования портов — предоставление пользователю сведений о том, какие порты и какой программой используются и какие из них желательно закрыть во избежание заражения компьютера вирусом, а также анализ портов и получение полной
Сканеры
Сканеры Сканер окажется незаменимым, когда вам понадобится перевести в цифровой вид какое-нибудь изображение. Например, фотографию для пересылки родственникам в Канаду. Или позарез нужный и очень длинный текст, который можно набрать, но проще и быстрее отсканировать, а
Сканеры
Сканеры Сканеры предназначены для ввода в компьютер информации с листа бумаги. Хотя, конечно, сканировать можно и любое двухмерное изображение. Например, стороны монет, панель мобильного телефона и т. д.Из всех существующих видов сканеров для пользователя, как правило,
Сканеры
Сканеры Максим Белоус IRISCard PRO 4: спутник бизнесмена IRISCard PRO 4 Реальная розничная цена: 199 евро. Компания, предоставившая устройство для тестирования: I.R.I.S., www.irisusa.com Оценка: отлично Достоинства. Легкое компактное устройство с большими возможностями; продуманное