Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 29
Текст из файла (страница 29)
В обычных языках программирования лексемами являютсячисластороныязыкаязыкапрограммированиямогутбытьдополнительныетребованияорганизациистороныязыкапрограммированиямогутбытьдополнительныетребованияорганизациистороныпрограммированиямогутбытьдополнительныетребованияорганизацииязыкапрограммированиямогутбытьдополнительныетребованиякк корганизации(десятичныецелые,вещественные),идентификаторы,служебныеслова, кразделители.информации.Именамогутиметьопределеннуюобластьвидимости.Например,полеинформации.Именамогутиметьопределеннуюобластьвидимости.Например,полеинформации.Именамогутиметьопределеннуюобластьвидимости.Например,полеинформации.Именамогутиметьопределеннуюобластьвидимости.Например,полеЗадачейлексическогоанализатораявляется заменаразнообразныхэлементовтекста записидолжнодолжнобытьуникальновпределахпределахструктуры(илиуровняструктуры),номожетможетзаписидолжнобытьуникальнопределахструктуры(илиуровняструктуры),номожетбытьуникальновввпределахструктуры(илиуровняструктуры),нономожетстандартновыглядящимилексемами,которыев дальнейшембудетлегче обрабатыватьзаписидолжнобытьуникальноструктуры(илиуровняструктуры),совпадатьсименемименемобъектавнезаписи(илидругогоуровнязаписи).тожежевремявремяимясовпадатьименемобъектавнезаписи(илидругогоуровнязаписи).тожевремяимясовпадатьименемобъектавнезаписи(илидругогоуровнязаписи).В тожевремяимявсовпадатьдругих сссчастяхкомпилятора.Лексическийанализсопровождаетсяисключениемобъектавнезаписи(илидругогоуровнязаписи).ВВВтоимяполяможетможетоткрыватьсяоператоромприсоединения,итогдатогдаможетвозникнутьконфликтнезначащихфрагментовтекстовпрограмм,например,и иитогдакомментариев.Длятех языков,вполяможетоткрыватьсяоператоромприсоединения,тогдаможетвозникнутьконфликтполяоткрыватьсяоператоромприсоединения,можетвозникнутьконфликтполяможетоткрыватьсяоператоромприсоединения,можетвозникнутьконфликткоторыхимеютсямакросредства,дополнительновыполняетсярасширениеимен(или(илинеоднозначностьнеоднозначностьвтрактовкетрактовкеимени).Еслиязыкимеетблочнуюструктуру,имен(илинеоднозначностьтрактовкеимени).Еслиязыкимеетблочнуюструктуру,тотоименвввтрактовкеимени).Еслиязыкимеетблочнуюструктуру,то тоимен(илинеоднозначностьимени).Еслиязыкимеетблочнуюструктуру,макровызовов.Подробнеезадачии проблемылексическогоанализарассматриваютсявнеобходимообеспечитьтакойспособхраненияинформации,чтобы,во-первых,необходимообеспечитьтакойспособхраненияинформации,чтобы,во-первых,необходимообеспечитьтакойспособхраненияинформации,чтобы,во-первых,необходимообеспечитьтакойспособхраненияинформации,чтобы,во-первых,пособии“Формальныеграмматикиивидимости,языки.
Элементытеориитрансляции”.поддерживатьблочныймеханизмаво-вторыхво-вторых-эффективноэффективноосвобождатьподдерживатьблочныймеханизмвидимости,а ааво-вторыхосвобождатьподдерживатьблочныймеханизмвидимости,освобождатьподдерживатьблочныймеханизмвидимости,во-вторых- эффективно-- эффективноосвобождатьСинтаксическийисемантическийанализаторы.Программадолжна бытьпамятьприпривыходеблока.Внекоторыхнекоторыхязыках(например,Аде)одновременнопамятьвыходеизблока.ВВВнекоторыхязыках(например,Аде)одновременно(в (впамятьпривыходеизизблока.языках(например,Аде)одновременно(в(впамятьпривыходеизблока.некоторыхязыках(например,Аде)одновременнопроверена на синтаксическую и семантическую правильность (должно быть провереноодномблоке)блоке)могутбытьвидимынесколькообъектоводнимименем,вдругихдругихтакаяодноммогутбытьвидимынесколькообъектовс соднимименем,в другихтакаяодномблоке)могутбытьвидимынесколькообъектовс соднимоднимименем,такаяодномблоке)могутбытьвидимынесколькообъектовименем,вв другихтакаясоблюдениеконтекстныхусловий),разделенана составныечасти, длякаждойизситуациянедопустима.ситуациянедопустима.ситуациянедопустима.которыхдолжно быть сформировано внутреннее представление.
В таблицыситуация недопустима. трансляторадолжнабытьзанесенавсяинформация,которуюможноизвлечьизНекоторыеспособыорганизациитаблицсимволовв компиляторе:таблицыНекоторыеосновныеосновныеспособыорганизациитаблицсимволоввкомпиляторе:компиляторе:таблицыНекоторыеосновныеспособыорганизациитаблицсимволовтаблицыНекоторыеосновныеспособыорганизациивв компиляторе:таблицыобрабатываемойпрограммы.Подробнее таблицзадачи символови проблемысинтаксическогоиидентификаторов,таблицырасстановки,двоичныедеревьяи реализацияблочнойидентификаторов,таблицырасстановки,двоичныедеревьяиреализацияреализацияблочнойидентификаторов,таблицырасстановки,двоичныедеревьяиблочнойидентификаторов,таблицырасстановки, двоичныедеревьяблочнойсемантическогоанализарассматриваютсяв разделе3.3.2 и реализацияв пособии “Формальныеструктуры.структуры.структуры.грамматикиязыки.
Элементытрансляции”.структуры. Элементытеорииитрансляции/ Генерациятеориивнутреннего представления программВнутреннее представление исходной программы. Внутреннее представлениеисходной программы в компиляторе в наибольшей степени зависит от той обработки,Генерациявнутреннегопредставлениякоторой должнаподвергнутьсяпрограмма.программНекоторые виды внутреннегопредставления больше подходят для фиксации структуры компилируемой программы,Результатом работы синтаксического анализатора должно быть некоторое внутреннеедругие ориентированына проведениеоптимизирующихпреобразований,третьипредставлениеисходной цепочкилексем, котороеотражает ее синтаксическуюструктуру.наиболеев удобныприв дальнейшемсинтезе (генерации)результатакомпиляции.Более подробноПрограмматаком видеможет либотранслироватьсяв объектныйкод, либовнутреннеепредставлениепрограммвкомпиляторахрассматриваетсявразделе3.3.3 иинтерпретироваться.в пособии “Формальные грамматики и языки.
Элементы теории трансляции”. Фазы оптимизации программ. Оптимизация – важнейшая задача компилятора.Язык внутреннего представления программыЯзыки высокого уровня, не связанные напрямую с особенностями конкретнойОсновныенасвойстваязыкавнутреннегопредставленияпрограмм:аппаратуры,которойдолжнывыполнятьсяпрограммы,без оптимизации не могута)онпозволяетфиксироватьсинтаксическуюструктуруисходнойиспользоваться для создания эффективных программ. Оптимизация программы;программ можетб) текст наможно автоматическигенерироватьво времясинтаксическогоаналипроводитьсяв неминтересахразличных свойствпрограмм.Обычноиспользуютдвеза;стратегии оптимизации: оптимизация в целях повышения скорости работы программыв) его конструкцииотносительнотранслироватьсяв объектный прикоди оптимизацияв целях должныуменьшенияразмеровпростопрограмм.Методы, используемыелибоэтихдостаточноэффективноинтерпретироваться.реализациистратегийчасто противоположны,хотя некоторые из них близки друг к другу.
Более подробно проблемы оптимизации программ в компиляторахНекоторые общепринятыеспособы внутреннего представления программ:рассматриваютсяв разделе 3.3.4.синтезапрограмм. Второй главной работой компилятора являетсяа) Фазыпостфикснаязапись;генерациярезультирующейпрограммы. На выходе компилятора должна бытьб) префикснаязапись;построенапоследовательностьсимволов (“цепочка”)выходного языка по темв) многоадресный код с явно именуемымирезультатами;правилам,которые предлагаютсяязыкоммашинныхкоманд или языком ассемблера. Вг) многоадресныйкод с неявноименуемымирезультатами;д) связные списочные структуры, представляющие синтаксическое дерево.29В основе каждого из этих способов лежит некоторый метод представления синтакси-за;б) префиксная запись;интерпретируются.в) егов)конструкциидолжныпростотранслироваться в объектный кодмногоадресныйкод сотносительноявно именуемымирезультатами;Легчевсегосинтаксическомуанализаторуорганизоватьвнутреннее (а для себя –либодостаточноэффективноинтерпретироваться.г) многоадресный код с неявно именуемыми результатами;выходное) представлениев виде дерева синтаксического разбора.
Однако деревод) связные списочные структуры, представляющие синтаксическое дерево.разборасодержитобщепринятыеогромное количествов немприсутствуютНекоторыеспособыизбыточнойвнутреннегоинформации:представленияпрограмм:даже нетерминальные символы, не несущие никакой полезной информации.
Чтоа) постфикснаязапись;из этих способов лежит некоторый метод представления синтаксиВ основе каждогодолжноческогоприсутствоватьво внутреннем представлении – это операторы и операндыдерева.б) префиксная запись;исходной программы, записанные в более удобной для последующей обработки форме.Замечаниев)многоадресныйс явноименуемымирезультатами;Удобствоэтозаключается,кодпреждевсего,в том, чтобыбыло легко отличить оператор отЧаще всего синтаксическим деревом называют дерево вывода исходной цепочки, в котором удаг) многоадресныйкодснеявноименуемымирезультатами;операнда,в какомбыпорядкеонидругзадругомниследовали.В Bосновекаждого излены вершины, соответствующие цепным правилам видаA → B, где A,N.связные списочныеструктуры,представляющиесинтаксическоедерево.видов д)внутреннегопредставленияпрограммлежит некоторыйметод представления синтаксическогодерева.ВреальныхкомпиляторахприменяютсяследующиеВыберем в качестве языка для представления промежуточной программы постфиксобщепринятыеспособывнутреннегопредставленияпрограмм:Внуюосновекаждогоизназываютэтих способовлежитнекоторыйметодзапись).представления синтаксизапись(ее такжеПОЛИЗ— польскаяинверсная ческого дерева.ПОЛИЗидеалендлявнутреннегопредставленияинтерпретируемыхязыковпрограм• связные списочные структуры, представляющие синтаксическое дерево;мированя, которые, как правило, удобно переводятся в ПОЛИЗ и легко интерпретируются.Замечание• многоадресный код с явно именуемыми результатами (тетрады – оператор,Чаще всегосинтаксическимдеревомназываютдеревовывода висходнойв которомвудаВ ПОЛИЗеоперандывыписаныслеванаправопорядкецепочки,их следованияисходномоперанд,операнд, результат);ленывершины,правилам видаA → B,операциигде A, B N.тексте.Знакисоответствующиеопераций стоят цепнымтаким образом,что знакунепосредственно предше• многоадресныйствуютее операнды.
код с неявно именуемыми результатами (триады – оператор,операнд-результат,операнд),иногдаэтотиз однойспособконстантыпредставленияПростым будем называтьвыражение,состоящееили имени пеВыберемвкачествеязыкадляпредставленияпромежуточнойпрограммымодифицируетсяи используетсякосвенныхтриадпостфикс(самиременной.Такие выраженияв ПОЛИЗепоследовательностьостаются без изменений.При переводев ПОЛИЗную запись(еетакженазываютПОЛИЗ—польскаяинверснаязапись).триадыхранятсявотдельнойтаблице,формируемаяпрограммапредставляетсложныхвыраженийважно правильнограницылюбаяподвыражений,являющихсялеодномкомпиляторекомпилятореможетопределятьиспользоватьсяиз этихэтих форм,форм, обычнообычноВВодномможетиспользоватьсялюбаяизПОЛИЗидеалендля внутреннегопредставленияинтерпретируемыхязыковпрограмвымииправымиоперандамибинарныхопераций.Проблемневозникает,еслисложныеподсобойпоследовательностьссылокнатаблицу);выбираютсянескольконесколькоразныхразныхвидоввидоввнутреннеговнутреннегопредставленияпредставленияпрограммпрограммдлядляразныхразныхвыбираютсямированя,которые,какзаписьправило,удобнопереводятсяв ПОЛИЗи легкоинтерпретируются.выраженияявноограниченыскобками.Например,в выражении(a операндами,b) с левымкакоперандом•инфиксная(операциизаписываютсямеждусвоимивстадий компиляции.компиляции.