Что значит синтаксическое чтение

СИНТЕТИЧЕСКОЕ ЧТЕНИЕ

Новый словарь методических терминов и понятий (теория и практика обучения языкам). — М.: Издательство ИКАР . Э. Г. Азимов, А. Н. Щукин . 2009 .

Смотреть что такое «СИНТЕТИЧЕСКОЕ ЧТЕНИЕ» в других словарях:

ЧТЕНИЕ СИНТЕТИЧЕСКОЕ — ЧТЕНИЕ СИНТЕТИЧЕСКОЕ. См. синтетическое чтение … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

ЧТЕНИЕ — ЧТЕНИЕ. Один из рецептивных видов речевой деятельности, направленный на восприятие и понимание письменного текста; входит в сферу коммуникативной деятельности людей и обеспечивает в ней одну из форм (письменную) общения. Важнейшая среди целей… … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

УЧЕБНОЕ ЧТЕНИЕ — (англ. guided reading). Вид учебной работы с текстом, чтение, задачей которого является выработка навыков и умений в чтении, а также в других видах речевой деятельности. Ср. реальное чтение. У. ч. формируются на базе следующих речевых действий и… … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

КУРСОРНОЕ ЧТЕНИЕ — КУРСОРНОЕ (от лат. cursorius – быстро бегущий) ЧТЕНИЕ. То же, что синтетическое чтение … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

Обучение чтению — аналитическое чтение, беспереводное чтение, выборочное чтение, выразительное чтение, глобальное понимание, градуированное чтение, громкое чтение, детальное чтение, дешифровка, динамическое понимание, дискурсивное чтение, домашнее чтение, зрелое… … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

Читайте также:  Иван калита что это значит

Пушкин, Александр Сергеевич — — родился 26 мая 1799 г. в Москве, на Немецкой улице в доме Скворцова; умер 29 января 1837 г. в Петербурге. Со стороны отца Пушкин принадлежал к старинному дворянскому роду, происходившему, по сказанию родословных, от выходца «из… … Большая биографическая энциклопедия

Кант Иммануил — Жизненный путь и сочинения Канта Иммануил Кант родился в Кенигсберге (ныне Калининград) в Восточной Пруссии в 1724 г. Отец был шорником, а мать домохозяйкой, шестеро их детей не дожили до зрелого возраста. Кант всегда вспоминал родителей с… … Западная философия от истоков до наших дней

Державин, Гавриил Романович — — знаменитый поэт, государственный человек и общественный деятель второй половины прошлого и первой четверти нынешнего столетия (р. 3 июля 1743, ум. 8 июля 1816). Предок его, татарский мурза Багрим, в ХV столетии, в княжение Василия… … Большая биографическая энциклопедия

Содержание обучения — активная грамматика, активная лексика, активный грамматический минимум, активный словарный запас, активный словарь, артикуляция, аспект обучения, аспекты языка, аудирование, аутентичный материал, база данных, виды речевой деятельности… … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

Русская литература — I.ВВЕДЕНИЕ II.РУССКАЯ УСТНАЯ ПОЭЗИЯ А.Периодизация истории устной поэзии Б.Развитие старинной устной поэзии 1.Древнейшие истоки устной поэзии. Устнопоэтическое творчество древней Руси с X до середины XVIв. 2.Устная поэзия с середины XVI до конца… … Литературная энциклопедия

Источник

Способ написания синтаксических анализаторов на c++

В этой статье рассказывается, как писать синтаксические анализаторы с помощью этой небольшой библиотеки на с++.

Обычно, текст на машинном языке состоит из предложений, те — из подпредложений, а те, в свою очередь, из подподпредложений, и так вплоть до символов.

Например, элемент xml состоит из открывающего тега, содержимого и закрывающего тега. —> Открывающий тег состоит из ‘ ‘. —> Закрывающий тег состоит из ‘ ‘. —> Атрибут состоит из имени, знаков ‘=’, ‘»‘, строки символов и снова ‘»‘. —> Содержимое в свою очередь тоже может содержать элементы. —> И т.д. Таким образом, после разбора получается синтаксическое дерево.

Такие языки удобно описывать формой Бэкуса-Наура (БНФ), где каждый нетерминал соответствует некоторому предложению языка. Когда мы пишем программы, мы обычно разбиваем их на функции и подфункции, и раз мы собрались писать синтаксический анализатор, пусть каждому нетерминалу БНФ соответствует одна функция нашего анализатора, и пусть каждая такая функция:

  • пытается разобрать это предложение с заданной позиции
  • возвращает, удалось ли ей это сделать
  • возвращает позицию, где закончился разбор или произошла ошибка
  • а также, возможно, возвращает некоторые дополнительные данные, которые мы хотим получить в результате разбора

Например для БНФ вида expr ::= expr1 expr2 expr3 будем писать такую функцию:

А для предложения БНФ вида expr ::= expr1 | expr2 | expr3 — функцию:

(Кажется это называется синтаксический анализ с возвратами)

Не всякий текст, удовлетворяющий БНФ нам может подходить. Например элемент языка xml может описываться так: element ::= ‘ ‘some_data’ ‘ , но это предложение будет действительно элементом, только если идентификаторы совпадают. Такие (или аналогичные) проверки можно легко добавлять в функции разбора.

Терминальные функции могут выглядеть например так:

Пока что мы делали синтаксический анализ строки. Но заметим, что для всех типов вышеперечисленных функций достаточно forward итераторов.

forward stream

Зададимся целью создать класс-поток, предоставляющий forward итераторы, и хранящий в памяти файл не целиком а небольшими кусочками. Тогда, если сделать функции разбора шаблонными, то их можно будет использовать и со строкамии, и с потоками. (Что и сделано в «base_parse.h» для терминальных (и около того )функций.) Но сначала внесем некоторые разъяснения в идеологию unix «все есть файл»: Бывают файлы располагающиеся на диске — их можно читать несколько раз и с любой позиции (назовем их random-access файлами ). А бывают потоки, перенаправленные из других программ, идущие по сети или от пользователя с клавиатуры (назовем их forward потоками). Такие потоки можно читать только за один проход. (fixme) По этому, что бы можно было работать и с тем и с другим, зададимся целью создать класс-поток, читающий файл за один проход, предоставляющий forward итераторы, и хранящий в памяти файл не целиком а небольшими кусочками.

Для input итераторов такие потоки реализованы очень давно, по сути в себе содержат только один input итератор, и внутри себя содержат один буфер, по которому движется этот итератор, и когда он подходит к концу буфера, в этот буфер загружается следующий кусок файла, а итератор начинает двигаться с начала обновленного буфера.

Forward итераторы отличаются от input итераторов тем, что их можно копировать. Для потока с forward итераторами решением будет список буферов. Как только какой-нибудь итератор выходит за пределы самого правого буфера, в список добавляется новый буфер, и заполняется непосредственно из файла блоком данных. Но постепенно так в память загрузится весь файл, а мы этого не хотим. Сделаем так, чтоб удалялись все буфера, находящиеся левее буфера на котором находится самый левый (отстающий) итератор. Но мы не будем каждому буферу сопоставлять список итераторов, находящихся на нем, а будем сопоставлять всего лишь их количество (подсчет итераторов). Как только какой-нибудь буфер узнает, что на нем осталось 0 итераторов и что он самый левый, тогда удаляется он и все соседние буфера правее него, на которых тоже 0 итераторов.

Получается, каждый итератор должен содержать:

  • указатель на символ (который будет возвращаться при разыменовании)
  • указатель на конец массива символов в буфере (с ним происходит сравнение при перемещении итератора)
  • итератор по списку буферов (для доступа к данным буфера, а через них к данным всего потока).

Когда итератор доходит до границы буфера, он смотрит, есть ли в списке буферов следующий, если его нет — загружает его, на предыдущем буфере уменьшает счетчик итераторов, а на следующем увеличивает. Если на предыдущем буфере осталось 0 итераторов — он удаляется. Если итератор дошел до конца файла — он только отвязывается от предыдущего буфера и переходит в состояние «конец файла». При копировании итератора — увеличивается счетчик итераторов на буфере на котором он находится, а при вызове деструктора итератора — счетчик уменьшается, и, опять же, если на буфере осталось 0 итераторов, то он и соседние справа буфера, на которых тоже 0 итераторов, — удаляются. Детали реализации смотри в «forward_stream.h».

У таких итераторов есть некоторые особенности использования, отличающие их от обычных итераторов. Так например, перед разрушением(деструктором) потока (хранящего список буферов и некоторую дополнительную информацию) должны быть разрушены все итераторы, т.к. при разрушении они будут обращаться к буферам в не зависимости от того, разрушены ли те в свою очередь или нет. Если мы один раз в результате вызова метода begin() получили первый итератор (и создали первый же буфер), и он ушел на столько, что первый буфер уже удален, мы не сможем снова получить итератор методом begin(). Также (как будет видно из следующего параграфа) у потока нет метода end(). В результате чего мной было принято решение сделать внутренний итератор в потоке, который инициализируется при инициализации всего потока, и ссылку на который можно получить методом iter(). Также при использовании в алгоритмах не стоит лишний раз копировать итераторы, т.к. в памяти хранятся буфера от самого левого до самого правого итератора, и в случае больших файлов это может привести к большому расходу памяти.

В качестве бонуса, есть различные типы буферов: простые (basic_simple_buffer), с вычислением строки-столбца по итератору (basic_adressed_buffer), планируется сделать буфер, осуществляющий перекодировку между различными кодировками. В связи с чем поток параметризуется типом буфера.

atend()

Конец сишной строки определяется нулевым символом. Это означает, что пока мы движемся по строке, чтобы обнаружить ее конец, нам надо не сравнивать указатель с другим указателем (как это традиционно делается в STL), а надо проверять значение, указываемое нашим указателем. С файлами примерно такая же ситуация: при посимвольном вводе char-ов мы получаем int-ы, и т.к. у них диапозон значений больше, мы опять же тестируем каждый символ на равенство EOF. Масла в огонь добавляет тот факт, что для forward потоков, поступающих в реальном времени, положение конца файла заранее неизвестно.

Эту информацию можно обобщить, сделав функцию atend(it), которая для указателей по строке будет выглядеть так:

А для итераторов по потоку она будет возвращать true, когда итератор указывает на конец файла.

strin

Для интерактивного взаимодействия с пользователем (через stdin) блочная буферизация не подходит, т.к. в блоке чаще всего помещается несколько строк, и после ввода одной строки программа продолжает ожидать ввода от пользователя, т.к. блок все еще не заполнен. Для этого необходима строковая буферизация, когда буфер заполняется символами вплоть до символа перевода строки. В этой библиотеке можно выбрать тип буферизации при помощи выбора типа файла, от которого инициализируется поток (basic_block_file_on_FILE или string_file_on_FILE).

strin — внутренний итератор потока над stdin’ом со строковой буферизацией.
Для неинтерактивных файлов при создании потока создается итератор, указывающий на первый символ, а значит загружается первый буфер. Для strin’а это не допустимо, т.к. программист может захотеть что-то выполнить или вывести на экран до того как программма перейдет в режим ожидания ввода строки.

По этому строковые файлы при заполнении первого буфера выдают фиктивную строку «\n». Для ее прочтения существует функция start_read_line(it), после выполнения которой программа переходит в режим ожидания ввода строки после чего можно произвести синтаксический анализ этой строки, не выводя при этом итераторы за пределы следующего символа ‘\n’.

Поле анализа прграммист может захотеть опять что-то вывести на экран, и если после этого ему опять понадобятся данные от пользователя, то перед их получением снова следует вызвать start_read_line(strin).

Т.о. получается цикл:

Конечно это костыль, и можно было бы сделать итераторы, которые требуют загрузки буфера только при разыменовании, но это привело бы к дополнительным проверкам при разименовании и просто усложнению всей системы…

Базовые функции парсинга

Что бы пользователю не приходилось каждый раз заново писать терминальные функции, они в «base_parse.h» уже реализованы. Сейчас они реализованы (кроме обработки плавающих чисел) в общем виде, в дальнейшам планируется специализировать их с использованием строковых функций (таких как strcmp, strstr, strchr, strspn, strcspn) для указателей по строкам и для итераторов по потокам. Также они позволяют пользователю почти не думать о конце файла, и просто задают стиль кода.

Ниже представлена краткая сводка базовых функций парсинга, возвращаемые значиния и статистика их использования при реализации двух тестовых парсеров.

Т.к. через имя функции удобно возвращать код ошибки или сообщение об ошибке, что бы текст парсеров выглядел более очевидно, я сделал специальные макросы:

Хотя вполне возможно сделать какой-нибудь класс, хранящий эту информацию и преобразуемый к bool соответствующим образом.

Вообще я противник неконстантных ссылок, и считаю, что аргументы, которые функция должна изменить, должны передаваться в нее по указателю а не по ссылке, что бы при вызове это было видно, но всвязи с тем, что операторы для указателей на что бы то ни было перегружать нельзя, специально для совместимости с operator>>() (парочка таких определена в «strin.h») я итераторы везде передаю по ссылке (а возвращаемые значения по указателю).

На данный момент имеется два примера использования этих функций: calc.cpp и winreg.cpp.

Таким образом для написания парсера не требуется умения обращаться с другими программами генерации парсеров. Каждый нетерминал БНФ взаимнооднозначно переводится в функцию, которая, конечно, громоздковата по сравнению с описанием в БНФ (это можно в дальнейшем исправить, сделав функцию, делающую разбор по регулярному выражению, аналогично как в ), но зато в нее можно добавить любую проверку и обработку данных. Все это можно делать как со строками, так и с потоками в одинаковой форме. Поток ввода по умолчанию готов к вводу по умолчанию, а операторы >>, аналогичные таким же из стандартной библиотеки, дают возможность использовать эту библиотеку вместо стандартной библиотеки ввода.

Как с помощью forward_stream делать токенезацию, я попробую рассказать и показать в следующей статье.

Источник

Синтаксический разбор предложения

Синтаксический раз­бор пред­ло­же­ния — это пол­ная харак­те­ри­сти­ка пред­ло­же­ния с ука­за­ни­ем цели выска­зы­ва­ния, инто­на­ции, коли­че­ства и типа грам­ма­ти­че­ских основ, раз­бор по чле­нам пред­ло­же­ния и пр., состав­ле­ние схемы.

Синтаксический разбор простого предложения

Одним из важ­ных при­зна­ков пред­ло­же­ния явля­ет­ся грам­ма­ти­че­ская осно­ва, в кото­рой сосре­до­то­чен смысл выска­зы­ва­ния. Предложение явля­ет­ся про­стым, если в нём содер­жит­ся одна грам­ма­ти­че­ская осно­ва. Она пред­став­ля­ет собой соче­та­ние под­ле­жа­ще­го и ска­зу­е­мо­го или содер­жит один глав­ный член (под­ле­жа­щее или ска­зу­е­мое).

Синтаксический раз­бор про­сто­го пред­ло­же­ния выпол­ня­ем поша­го­во в соот­вет­ствии со сле­ду­ю­щим алгоритмом:

  1. Определить вид пред­ло­же­ния по цели высказывания
  2. Характеристика пред­ло­же­ния по эмо­ци­о­наль­ной окраске
  3. Выяснить грам­ма­ти­че­скую основу
  4. Указать вид про­сто­го пред­ло­же­ния по нали­чию глав­ных чле­нов (дву­со­став­ное или односоставное)
  5. Определить тип одно­со­став­но­го предложения
  6. Характеризовать пред­ло­же­ние как рас­про­стра­нён­ное или нераспространённое
  7. Определить, пол­ное пред­ло­же­ние или неполное
  8. Указать, ослож­нён­ное пред­ло­же­ние или неосложнённое
  9. Разобрать по чле­нам пред­ло­же­ния, под­чер­ки­вая их соот­вет­ству­ю­щей линией
  10. Составить схе­му предложения

Рассмотрим подроб­нее и объ­яс­ним все пунк­ты син­так­си­че­ско­го раз­бо­ра про­сто­го предложения.

Характеристика простого предложения

1. По цели выска­зы­ва­ния раз­ли­ча­ют предложения:

Повествовательное пред­ло­же­ние сооб­ща­ет о ком-то или о чём-то и про­из­но­сит­ся со спо­кой­ной интонацией.

На ули­це дует силь­ный ветер. Он быст­ро разо­гнал обла­ка на небе. Вскоре засве­ти­ло яркое солнце.

Вопросительное пред­ло­же­ние выра­жа­ет вопрос, на кото­рый нуж­но полу­чить ответ. С помо­щью вопро­си­тель­но­го пред­ло­же­ния гово­ря­щий хочет узнать о чём-то, полу­чить досто­вер­ную инфор­ма­цию. Вопросительное пред­ло­же­ние про­из­но­сит­ся с осо­бой инто­на­ци­ей, под­чер­ки­ва­ю­щей глав­ное сло­во в нём.

Побудительное пред­ло­же­ние содер­жит совет, при­каз, запрет, прось­бу, при­зыв к действию.

2. По эмо­ци­о­наль­ной окрас­ке, по силе выра­жен­но­го чув­ства пред­ло­же­ния делят на

Невосклицательные пред­ло­же­ния про­из­но­сят­ся без про­яв­ле­ния чувств со спо­кой­ной интонацией.

Дети с инте­ре­сом слу­ша­ют бабуш­ки­ну сказку.

Восклицательные пред­ло­же­ния выра­жа­ют опре­де­лён­ное чув­ство. Они про­из­но­сят­ся с осо­бой инто­на­ци­ей. В кон­це их ста­вит­ся вос­кли­ца­тель­ный знак.

3. Следующий шаг раз­бо­ра — опре­де­ле­ние грам­ма­ти­че­ской осно­вы. Если в пред­ло­же­нии выяв­ле­на одна грам­ма­ти­че­ская осно­ва, это про­стое пред­ло­же­ние. В слож­ном пред­ло­же­нии содер­жат­ся две и более грам­ма­ти­че­ских основ.

4. Если в пред­ло­же­нии нали­цо оба глав­ных чле­на пред­ло­же­ния, под­ле­жа­щее и ска­зу­е­мое, такое пред­ло­же­ние явля­ет­ся двусоставным.

Осеннее небо запла­ка­ло мел­ким дождем.

Если в пред­ло­же­нии выяв­лен один глав­ный член (под­ле­жа­щее или толь­ко ска­зу­е­мое), такое пред­ло­же­ние назы­ва­ет­ся одно­со­став­ным.

5. Определяем тип одно­со­став­но­го пред­ло­же­ния по тому, чем выра­жен его глав­ный член. Если это под­ле­жа­щее в фор­ме име­ни­тель­но­го паде­жа, то это назыв­ное пред­ло­же­ние.

Односоставные гла­голь­ные пред­ло­же­ния раз­ли­ча­ют по грам­ма­ти­че­ской фор­ме сказуемого:

6. Выясним, есть ли в пред­ло­же­нии вто­ро­сте­пен­ные чле­ны, по нали­чию кото­рых или отсут­ствию пред­ло­же­ние харак­те­ри­зу­ет­ся как рас­про­стра­нён­ное или нерас­про­стра­нён­ное .

7. Если в струк­ту­ре пред­ло­же­ния мож­но ука­зать все чле­ны, необ­хо­ди­мые для пони­ма­ния его смыс­ла, такое пред­ло­же­ние явля­ет­ся пол­ным. В непол­ных пред­ло­же­ни­ях отсут­ству­ет один или несколь­ко чле­нов, кото­рые под­ска­зы­ва­ет преды­ду­щий контекст.

Ты где сей­час нахо­дишь­ся? — Дома (Я сей­час нахо­жусь дома).

8. Осложнённым явля­ет­ся про­стое пред­ло­же­ние, если в нем имеются

  • одно­род­ные члены;
  • обра­ще­ния
  • ввод­ные слова
  • встав­ные конструкции
  • обособ­лен­ные чле­ны предложения.

Если этих эле­мен­тов нет в про­стом пред­ло­же­нии, то оха­рак­те­ри­зу­ем его как неосложнённое.

9. Далее при­сту­пим к раз­бо­ру по чле­нам пред­ло­же­ния, выявив под­ле­жа­щее и ска­зу­е­мое и вто­ро­сте­пен­ные чле­ны пред­ло­же­ния. Подчеркнем каж­дый из чле­нов пред­ло­же­ния соот­вет­ству­ю­щей линией:

  • под­ле­жа­щее — одной пря­мой лини­ей ( );
  • ска­зу­е­мое — дву­мя пря­мы­ми лини­я­ми ( );
  • опре­де­ле­ние — вол­ни­стой лини­ей ( );
  • допол­не­ние — штри­хо­вой лини­ей ( );
  • обсто­я­тель­ство — лини­ей, в кото­рой чере­ду­ют­ся штрих и точ­ка ( ).

Для нагляд­но­сти при­ве­дем при­ме­ры син­так­си­че­ско­го раз­бо­ра про­сто­го предложения.

Примеры синтаксического разбора простого предложения

После дождя над лесом повис­ла раз­но­цвет­ная радуга.

Повествовательное, невос­кли­ца­тель­ное, про­стое, дву­со­став­ное, рас­про­стра­нён­ное, пол­ное, неослож­нен­ное предложение.

После дождя над лесом повис­ла раз­но­цвет­ная раду­га .

Чтобы най­ти под­ле­жа­щее, к сло­ву с пред­мет­ным зна­че­ни­ем зада­дим вопрос что?

Радуга — это под­ле­жа­щее, выра­же­но суще­стви­тель­ным в име­ни­тель­ном паде­же ед. ч. жен­ско­го рода.

Радуга (что сде­ла­ла?) повис­ла. Это про­стое гла­голь­ное ска­зу­е­мое, кото­рое выра­же­но гла­го­лом изъ­яви­тель­но­го накло­не­ния про­шед­ше­го вре­ме­ни ед. ч. ж. р.

Радуга (какая?) раз­но­цвет­ная. Определение выра­же­но при­ла­га­тель­ным в фор­ме ед. ч. ж. р. име­ни­тель­но­го падежа.

Повисла (где?) над лесом. Обстоятельством места высту­па­ет суще­стви­тель­ное в фор­ме тво­ри­тель­но­го паде­жа ед. ч. муж­ско­го рода.

Повисла (когда?) после дождя. В роли обсто­я­тель­ства вре­ме­ни исполь­зу­ет­ся суще­стви­тель­ное в фор­ме роди­тель­но­го паде­жа ед. ч. муж­ско­го рода.

Каждый член пред­ло­же­ния обо­зна­чим, какой частью речи он выражен.

Побудительное, вос­кли­ца­тель­ное, про­стое, одно­со­став­ное, определённо-личное, рас­про­стра­нён­ное, пол­ное пред­ло­же­ние, ослож­нен­ное обращением.

Синтаксический разбор сложного предложения

Синтаксический раз­бор слож­но­го пред­ло­же­ния начи­на­ет­ся с общей харак­те­ри­сти­ки, как и про­сто­го пред­ло­же­ния. Выполним раз­бор в соот­вет­ствии с планом:

  1. Вид пред­ло­же­ния по цели высказывания.
  2. Вид пред­ло­же­ния по эмо­ци­о­наль­ной окраске.
  3. Указать коли­че­ство про­стых пред­ло­же­ний, выде­лив их грам­ма­ти­че­ские основы.
  4. Определить связь в пред­ло­же­нии (союз­ная или бессоюзная).
  5. Если связь союз­ная, уточ­ним, сочи­ни­тель­ная или подчинительная.
  6. Укажем тип слож­но­го пред­ло­же­ния (слож­но­со­чи­нен­ное, слож­но­под­чи­нен­ное или бессоюзное)
  7. Разобрать каж­дое про­стое предложение.
  8. Составить схе­му предложения.

Выполним син­так­си­че­ский раз­бор слож­ных предложений.

Примеры синтаксического разбора сложного предложения

На тем­ном небе сверк­ну­ла яркая мол­ния, и раз­дал­ся оглу­ши­тель­ный гром.

Повествовательное, невос­кли­ца­тель­ное, слож­ное пред­ло­же­ние, состо­я­щее из двух грам­ма­ти­че­ских основ (мол­ния сверк­ну­ла, гром раз­дал­ся); союз­ное, соеди­ни­тель­ный союз «и», слож­но­со­чи­нен­ное.

На тем­ном небе сверк­ну­ла яркая мол­ния , и раз­дал­ся оглу­ши­тель­ный гром .

Городская пло­щадь, на кото­рой шуме­ла ярмар­ка, была укра­ше­на шара­ми, фла­га­ми и ярки­ми транспарантами.

Повествовательное, невос­кли­ца­тель­ное, слож­ное пред­ло­же­ние, две грам­ма­ти­че­ские осно­вы (пло­щадь была укра­ше­на; ярмар­ка шуме­ла), союз­ная связь, союз­ное сло­во «на кото­рой» соеди­ня­ет глав­ное пред­ло­же­ние (Городская пло­щадь была укра­ше­на шара­ми, фла­га­ми и ярки­ми транс­па­ран­та­ми) с зави­си­мым (на кото­рой шуме­ла ярмар­ка), слож­но­под­чи­нен­ное пред­ло­же­ние с при­да­точ­ным определительным.

Городская пло­щадь , на кото­рой шуме­ла ярмар­ка , была укра­ше­на шара­ми , фла­га­ми и ярки­ми транс­па­ран­та­ми .

Девушка огор­чи­лась: она забы­ла вер­нуть подру­ге журнал.

Повествовательное, невос­кли­ца­тель­ное, слож­ное пред­ло­же­ние, две грам­ма­ти­че­ские осно­вы (девуш­ка огор­чи­лась; она забы­ла вер­нуть), бес­со­юз­ная связь, вто­рое про­стое пред­ло­же­ние выра­жа­ет при­чи­ну того, о чем идет речь в пер­вом пред­ло­же­нии; бес­со­юз­ное слож­ное предложение.

Девушка огор­чи­лась : она забы­ла вер­нуть подру­ге жур­нал .

Источник

Оцените статью