Титов Александр Алексеевич : другие произведения.

Трансляция яз. программирования

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:

  Из письма
  
  > scannerless parsing
  
  терминологич. нестыковка
  
  кто что называет сканер, парсер
  или
  сканер, лексич анализатор, синт анализатор
  
  в той школе что в старой книжке
  сканер+лекс. анал совмещены.
  На входе: перфокарты с текстом (ваариант: строки текст. файла)
  На выходе: т н лексемы в виде их кодов.
  При этом что называть "термминальными символами" я так и не понял:)
  
  в той школе, что на мехмате (это какой-то вар-т (переосмысленной?) школы Вирта)
  
  сканер - это Nextchr()
  вход - текстовый файл со всякими переводами строк, табуляторами и иже с ними
  выход: очередной символ ASCII curchar. Не "терминальный символ" , а ASCII
  При этом как правило неск пробелов или пробел-табулятор-чтотоещётипа того преобразуются в ОДИН пробел ибо он в энтих всех языках синтаксически значимый.
  То есть это НЕ для фортрана, где оператор кончается пустым концом перфокарты (или скажем CR LF), а типа алголов, где оператор кончается (или отделяется) ;
  хотя переделать нет проблем, т к по трудоемкости Nextchr всего лишь как синт анализатор:)
  
  Лексический анализатор - это NextLex()
  на входе у него вызовы Nextchr() и получаемые от него curchar
  на выходе ЛЕКСЕМЫ, иногда наз терминальными символами (не уверен, что это я назыв правильно) но неважно
  Пример:
  Из curchar-ов набралось слово ELSE или Else или еLse и т п
  На выходе выдаем (curlex типа число) равное константе с именем ELSEW
  (слово word Else)
  На входе пусть набралось символами ASCII 200.5 далее не цифра и не E
  На выходе тогда curlex принимает сначение FLOATW, а дополнительная переменная valueF принимает значение float 200.5 т е лекс. анализатор также и преобразовал текст в число.
  и т п
  и со значениямb соотв констант переменную curLex потом сравнивает синт анализатор
  
  Синт анализатор - это механически переписанный на алголе синтаксис записанный в чем-то вроде бнф, как я уже посылал примеры.
  Синт ан. требует след порцию текста программы (след лексему), вызывая Nextlex()
  и в соотв местах если поступило НЕ то, чт нужно,
  он выдает ошибку и например пролистывает NextLex()ом всё до ближайшей лексемы SEMICOLONW
  если же форма оператора языка соблюдается, то в каждом месте оператора после прихода соотв лексемы (в т ч числа или строки или имени), в соотв точке программы (себя самого) он знает, что с ним делать (куда засунуть, например, в список или дерево) на выход.
  На выходе у него список или дерево разобранной программы, от которой исх текста уже не осталось, а имеем какой-то полугенерерированный смысловой вид сотв интерпретации входного языка, как он задуман, и всё в кодах максимально удобно.
  
  Спраш в задаче, а разбор числа, скажем -0.005E-12 - это задача лексич анализатора, или синтаксического? алгоритм разбора такой же, как в синт. анализаторе, т е по БНФ числа. Но это удобно опустить на уровень лекс. ан.
  
  Также спрашивается, а если пришла лексема "IDENTW", то где проверять, переменая соотв идентификатору уже определена, м б ему дана память(!), прямо тут, в синт анализаторе, и например, если это неописанная переменная, то выдавать ошибку (синтаксическую? или какую?),
  либо совать всё как есть в вых список, а разбираться потом.
  либо тут где она возникла, её и создавать в теблице
  Так вот, PASCAL придуман Виртом именно так, чтобы этот кусок (вообще-то генератора) совместить с синт анализатором, т е описания переменых строго предшеств их использованию, и не кто иной как синт. анализатор уже ЗАПИСАЛ этот идентификатор в соотв таблицу или что0то подобное и при повт появлении ищет там.
  В этом смысле входной язык "однопроходный"
  т е вых дерево (список) строится за один проход
  
  если язык не столь удобен писателю транслятора, то и х с ним, можно доразобрать дерево потом
  
  всё, что здесь описано, никаких концепций кроме взять такой-то ключ на 17, не содержит и с т зр програмирования тривиально, и даже занятно. Какой хошь язык, такой и разобрали.
  
  что делать с разобранной программой, вопрос отдельный, куда её.
  но это тоже вопрос чисто технический.
  
  никакой науки здесь вообще нигде нет. это сантехника.
  и всякий бред насчет языков которрые возможны без сканера или невозможны - бред тоже. не видел таких во вс сл на перфокартах совр смартфонов :)
  
  Весь смысл в том, ЧТО ИМЕННО нам удобно на входе,
  чтоб получить то, что нужно на выходе после генерации
  и именно это и НУЖНО обсуждать и обдумывать, чтоб очертя голову не программировать всяку хрень.
  что угодно закодирую быстренько или я , или ты.
  (понятно же изложил?:)
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"