Требования, предъявляемые к вступительному сочинению в вузы, в частности в МГУ, базируются на «Нормах оценки знаний, умений и навыков» Министерства просвещения РФ для средних общеобразовательных школ. Вместе с тем существуют некоторые отличия в подходах и критериях в оценке экзаменационных работ между школьной и вузовской практикой.
Второе принципиальное отличие заключается в самом характере вступительного экзамена: это экзамен конкурсный, а значит, критерии оценки определяются уровнем подготовки поступающих. Конкурс в университете традиционно высокий, и поэтому многие абитуриенты, чьи знания оценивались в школе на «отлично», получают на вступительном экзамене более низкие отметки.
При проверке грамотности учитываются три типа ошибок: орфографические, пунктуационные и стилистические , которые подчеркиваются в работе и выносятся на поля общепринятым образом (орфографические подчеркиваются двумя или одной чертой и на полях ставится «палка», пунктуационные подчеркиваются одной чертой и на полях ставится «галочка», стилистические подчеркиваются волнистой чертой и на полях ставится знак «ст»).
Учимся искать ошибки в коде Виды ошибок в олимпиадных задачах по программированию. Отладка программ
Если первые два вида ошибок в комментариях не нуждаются, то на понятии «стилистическая ошибка» следует остановиться более подробно.
Классификация стилистических ошибок
При оценке сочинений, кроме орфографических и пунктуационных ошибок, учитываются так называемые стилистические ошибки. В практике школьного преподавания они разграничиваются на грамматические (языковые) и речевые.
Грамматические ошибки возникают при нарушении структуры какой-либо единицы языка, когда система языка усвоена, а норма еще не сформирована. Они делятся на морфологические, словообразовательные и синтаксические.
Морфологические ошибки проявляются в нарушении грамматических форм имен и глаголов, например:
человечишко (при нормативном для одушевленных имен существительных мужского рода после уменьшительно-ласкательных суффиксов окончании –а,; ср. обратный случай – ветхого домишки вм. домишка );
нет время (вместо правильной формы родительного падежа с окончанием –и – времени при отрицании),
( новых ) сплетней (с окончанием –ей при нормативном нулевом окончании);
существующие положения вещей (форма множественного числа существительного вместо формы единственного в устойчивом словосочетании положение вещей или дел );
более значительнее (вм. более значительный ),
самый лучший (вм. формы лучший , которая уже является формой превосходной степени прилагательного хороший ),
свойсвенен (при нормативной краткой форме мужского рода этого прилагательного свойствен );
от ее (вм. от неё );
ездиет (вм. ездит ),
ложат (вм. кладут ),
пиша (при невозможности образования формы деепричастия от глагола писать ).
Словообразовательные ошибки являются результатом неправильного словообразования, при этом часто
Три типа ошибок программирования в любом языке. Типичные ошибки программистов.
по имеющимся в языке моделям образуются «несуществующие» слова.
Низкопоклонник , низкоприклонство , жалкость , времяпровождение .
Синтаксические ошибки – это ошибки в нарушении подчинительных связей на уровне словосочетания (при согласовании и управлении) или в нарушении структуры простых и сложных предложений.
Объяснять о чем-то, стихотворение «Кинжал» написан…; Узнав об этом, становится понятно …; Печорин бросается догонять Веру. Так как хочет объясниться с ней .
Речевые ошибки встречаются в письменных работах намного чаще грамматических. Т.к. для констатации речевой ошибки нужен контекст, целесообразно классифицировать их с позиций текста, выделяя смысловые (семантические) ошибки и ошибки, нарушающие стилистическую целостность текста (стилевые).
Семантические ошибки – это нарушение требований, предъявляемых к точности словоупотребления:
А) неправильный выбор слова:
Пламенный крепостнический трибун, Яким Нагой …(вм. трибун, обличающий крепостничество ); Он апеллирует разными периодами мировой истории (вм. оперирует );
Б) употребление слова в несвойственном ему значении:
Пугачев – главарь восставшего народа (вм. вожак, предводитель); Графиня-внучка уезжает с бала из-за отсутствия танцовщиков (танцовщик – артист балета);
В) смешение паронимов:
Она вела свое хозяйство экономично (вм. экономно ); Развитие действия уступает место длинным монологам, пространственным речам (вм. пространным ); Из сбившихся речей Репетилова невозможно понять (вм. сбивчивых ); Татьяну трудно обсуждать за это (вм. осуждать );
Г) нарушение лексической сочетаемости слов:
Гринев попал в несчастье (попасть можно в беду ); вздыбленный всадник (вм. вздыбленный конь ); Начавшись с осторожного перешептывания, слух о сумасшествии Чацкого набирает уверенность (вм. набирает силу ).
Стилевые ошибки – это употребление в письменной работе слов, не относящихся к стилям кодифицированного литературного языка, т.е. употребление слов просторечных, диалектных, а также жаргонизмов и арготизмов. Ср. например:
Автор проверяет героев на вшивость; Лиза стоит на стрёме; В русской литературе царил беспредел. А потом явился Пушкин – первый авторитет в нашей литературе.
Таким образом, классификацию стилистических ошибок можно представить следующим образом:
Все остальные возможные нарушения требований коммуникативной целесообразности высказывания и стиля, нарушения формальной связности при создании текста, приводящие к ошибкам в построении текста, следует отнести к стилистическим недочетам . Это:
— неудачный порядок слов в предложении;
— неудачное использование местоимений:
Главным героем комедии Грибоедова является Чацкий – представитель передовой дворянской молодежи. Он(?) показывает его(?) в столкновении с косным обществом ;
Одинокое дерево вызывает ассоциации с угрюмым холостяком. Оно(?) написано в форме отрывка ;
Достаточно посмотреть на события любого государства в любой период своего (вм. его) развития ;
— бедность и/или однообразие синтаксических конструкций;
— неудачное использование лексического повтора в одном предложении или в качестве средства связи разных предложений;
-семантическая избыточность, нарушающая лексическую норму : повторение того же самого другими словами – тавтология, например: природный пейзаж (пейзаж — описание природы в литературном произведении) или стилистическая избыточность — плеоназм: период времени (близкие по значению слова);
-употребление слов иной стилевой окраски (т.е. использование в сочинении не нейтральной лексики, а, например, слов разговорного стиля или, наоборот, высокого);
-употребление эмоционально-экспрессивной лексики, неуместной в таком жанре, как сочинение;
Перечисленные выше случаи стилистических недочетов и указанные недочеты при построении текста снижают выразительность письменной речи, но не подпадают под понятие «ошибки», являясь стилистическими погрешностями.
Источник: portal-slovo.ru
Какую ошибку называют синтаксической, а какую-семантической? Какие из этих видов ошибок
Какую ошибку нарекают синтаксической, а какую-семантической? Какие из этих видов ошибок относятся к программке, а какие-к методам?
Могут ли быть в методе или программке иные оплошности, ежели синтаксические и семантические? Если да, то как бы вы их окрестили?
- Егор
- Информатика
- 2019-05-29 06:36:37
- 1
Вован 2019-05-29 06:38:26
Синтаксическая ошибка — нарушение формального описания языка программирования, т.е. например не поставили в конце строчки ; либо оператор if написали через две f, чаше всего являются опечатками в тексе программки
Семантическая ошибка — ошибка связанная с исполнением метода, иногда семантические оплошности нарекают логическими, как пример можно привести попытку обращения к неописанной переменной либо ошибке в формулах. типов семантических ошибок очень много и вычислительные, типа деления на 0, преобразования типов, когда в переменную типа int пихают строчку и т.д. заканчивая оплошностями зацикливающими программу
Оплошности не являющиеся синтаксическими и семантическими могут так-же встречаться, к примеру пользователь пробует записать данные на защищенный диск и получает ошибку, но виновата в этом не программка а юзер, введший не корректные данные
Источник: obrazovalka.com
Введение в теорию трансляторов
Одним из центральных понятий в информатике является формализующая обработка информации, называемая парсингом. На ее входе имеется неподходящий для дальнейшей обработки информации текст. Это может быть текст либо на другом языке (на другом уровне языка), либо недостаточно или совсем не формализованный текст, непригодный для простой автоматической обработки.
Синтаксический анализ, парсинг — это процесс сопоставления линейной последовательности лексем (слов, фраз) языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом.
Синтаксический анализатор (парсер) — это программа или часть программы, выполняющая синтаксический анализ, то есть распознавание входной информации. При этом входные данные преобразуются к виду, пригодному для дальнейшей обработки. Этот вид обычно представляет собой формальную модель входной информации на языке последующего процесса обработки информации.
Пример разбора выражения в дерево
При парсинге исходный текст преобразуется в структуру данных, обычно — в дерево, которое отражает синтаксическую структуру входной последовательности и хорошо подходит для дальнейшей обработки.
Как правило, результатом синтаксического анализа является синтаксическая структура предложения, представленная либо в виде дерева зависимостей , либо в виде дерева составляющих , либо в виде некоторой комбинации первого и второго способов представления.
Всё что угодно, имеющее «синтаксис», поддается автоматическому анализу:
- языки программирования — разбор исходного кода языков программирования, в процессе трансляции (компиляции или интерпретации);
- структурированные данные — данные, языки их описания, оформления и т. д., например, XML, HTML, CSS, ini-файлы, специализированные конфигурационные файлы и т. п.
- SQL-запросы (DSL-язык)
- математические выражения
- регулярные выражения (которые, в свою очередь, могут использоваться для автоматизации лексического анализа)
- формальные грамматики
- лингвистика — человеческие языки, например, машинный перевод и другие генераторы текстов.
Типы алгоритмов
Нисходящий парсер (англ. top-down parser) — такой парсер, в котором продукции грамматики раскрываются, начиная со стартового символа, до получения требуемой последовательности лексем.
Восходящий парсер (англ. bottom-up parser) — такой парсер, в котором продукции восстанавливаются из правых частей, начиная с токенов-лексем и кончая стартовым символом.
Восстановление после ошибок
Простейший способ реагирования на некорректную входную цепочку лексем — завершить синтаксический анализ и вывести сообщение об ошибке. Однако часто оказывается полезным найти за одну попытку синтаксического анализа как можно больше ошибок. Именно так ведут себя трансляторы большинства распространённых языков программирования.
Таким образом перед обработчиком ошибок синтаксического анализатора стоят следующие задачи:
- он должен ясно и точно сообщать о наличии ошибок;
- он должен обеспечивать быстрое восстановление после ошибки, чтобы продолжать поиск других ошибок;
- он не должен существенно замедлять обработку корректной входной цепочки.
Ниже описаны наиболее известные стратегии восстановления после ошибок.
Восстановление в режиме паники
При обнаружении ошибки синтаксический анализатор пропускает входные лексемы по одной, пока не будет найдена одна из специально определенного множества синхронизирующих лексем. Обычно такими лексемами являются разделители, например, ;,) или >. Набор синхронизирующих лексем должен определять разработчик анализируемого языка. При такой стратегии восстановления может оказаться, что значительное количество символов будут пропущены без проверки на наличие дополнительных ошибок. Данная стратегия восстановления наиболее проста в реализации.
Восстановление на уровне фразы
Иногда при обнаружении ошибки синтаксический анализатор может выполнить локальную коррекцию входного потока так, чтобы это позволило ему продолжать работу. Например, перед точкой с запятой, отделяющей различные операторы в языке программирования, синтаксический анализатор может закрыть все ещё не закрытые круглые скобки. Это более сложный в проектировании и реализации способ, однако, в некоторых ситуациях, он может работать значительно лучше восстановления в режиме паники . Естественно, данная стратегия бессильна, если настоящая ошибка произошла до точки обнаружения ошибки синтаксическим анализатором.
Продукции ошибок
Знание наиболее распространённых ошибок позволяет расширить грамматику языка продукциями, порождающими ошибочные конструкции. При срабатывании таких продукций регистрируется ошибка, но синтаксический анализатор продолжает работать в обычном режиме.
Разновидности компиляторов
Что такое компилятор. Исходный и целевой язык.
- Интерпретаторы
- Форматтеры текста
- Статические анализаторы кода
- Препроцессоры
- макросы define
- включение файлов #include
- условная компиляция #ifdef
- расширения языка, которые препроцессор переводит в код на языке
Фазы компиляции
- Лексический анализ (сканирование)
- Синтаксический анализ (разбор, «парсинг»)
- Семантический анализ
На примере выражения p := i + r * 60
id1 := id2 + id3 * 60
- Обнаружение ошибок. Лексические, синтаксические и семантические ошибки.
- Генерация промежуточного кода
На примере трехадресного кода
t1 := IntToReal(60) t2 := id3 * t1; t3 := id2 + t2; id1 := t3;
- Оптимизация кода
t1 := id3 * 60.0; id1 := id2 + t1;
- Генерация кода (основное — назначение переменных регистрам)
MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1
Почти на каждой стадии могут выполняться дополнительные оптимизации, а также происходит анализ и обработка ошибок.
Математическим обеспечением фаз лексического и синтаксического анализа является теория формальных языков. Обычно лексические анализаторы генерируются с помощью регулярных выражений .
Синтаксический анализ основывается на теории контекстно-свободных (КС) грамматик. Общая форма КС-грамматики не позволяет разбирать язык достаточно простым (в частности, автоматически сгенерированным) парсером, потому языки программирования обычно принадлежат одному из нескольких специальных подклассов КС-языков (LL, LR, LALR), которые проще разбирать и некоторые из которых будут подробно изучены в курсе.
Упомянутые достижения теории формальных языков насчитывают уже несколько десятков лет, и в этой области не ожидается каких-либо новых разработок, тем более что имеющиеся теоретические результаты хорошо решают практические задачи. По другому обстоит дело с изучением других двух разделов компиляции: семантическим анализом и оптимизацией. Работы по формальному описанию семантики языков программирования интенсивно появлялись в 70-80-х годах. Однако ни одна из построенных теорий не вошла в широкое употребление при построении компиляторов, и сегодня дело обстоит таким образом, что семантика вначале описывается на естественном языке, а затем реализуется в компиляторе большим набором вручную закодированных условных операторов.
Напротив, в последние годы растёт актуальность теории оптимизирующих преобразований — это объясняется появлением всё более высокоуровневых языков и разнообразных аппаратных платформ. Оптимизация также требует привлечения развитого математического аппарата (в частности, для решения вопроса о корректности преобразований). Многие из достижений активно внедряются в промышленные компиляторы. Всё больше это касается преобразований, связанных с распараллеливанием.
На этапе построения семантического дерева строится таблица символов — в нее заносятся имена, присутствовавшие в исходном тексте, к ним добавляются такие атрибуты как тип, отведённая память, область видимости.
Группировка фаз
- Front-end и back-end компиляторы.
Перечисленные выше фазы обычно группируются в два модуля — front-end и back-end, в зависимости от того, к какой стороне процесса компиляции они ближе, к исходному языку или к машинному коду для целевой платформы, соответственно. Возможность отдельно разрабатывать front-end и back-end повышает эффективность труда разработчиков компиляторов — насколько, зависит от эффективности используемого внутреннего представления, связывающего эти два модуля. В последнее время всё чаще выделяют middle-end — части компилятора, активно работающие с промежуточным представлением.
- Проходы. Группировка фаз компилятора в проходы (например, объединение фаз лексического, синтаксического, семантического анализа и генерации кода).
Разбиение процесса компиляции на фазы является логическим. Есть и другой, физический подход к такому разбиению — на проходы . Проходом обычно считается одно чтение исходного потока (и, возможно, одна законченная генерация выходного). Разные фазы могут группироваться в один проход.
- Уменьшение количества проходов (на примере предварительного описания подпрограмм). Технология обратных поправок.
Компиляция и многомодульность. Необходимость компилировать модуль в некоторый формат, содержащий правильную программу. Перемещаемые адреса. Редактор связей (линковщик).
Инструментарий для создания компиляторов
- Генераторы лексических анализаторов (сканеров)
- Генераторы синтаксических анализаторов (парсеров)
- Автоматические генераторы кода
Компиляторы компиляторов
- Lex + Yacc
- Flex + Bison
- CoCo
- Antlr
- Gold Parser Builder
- GPLex + GPPG
Порождающие грамматики
Определение. Терминалы, нетерминалы, символы. Продукции. Стартовый символ.
a,b,c, . — терминалы u,v,w,x,y,z — строки (цепочки) терминалов A,B,C, . — нетерминалы α,β,γ, . — строки (цепочки) нетерминалов и терминалов ε — пустая цепочка
Опр. формальной грамматики (порождающей грамматики Хомского)
G = (N,Σ,P,S) N — нетерминалы Σ — терминалы P — правила вывода (продукции) вида α→β, α — непустая
V = Σ + N — множество всех нетерминалов и терминалов
V * — множество всех цепочек символов из V
Классификация формальных грамматик по Хомскому
- Грамматика типа 0 (общего вида). Правила имеют вид α→β
- Грамматика типа 1 (контекстно зависимая, КЗ)
- Грамматика типа 2 (контекстно свободная, КС)
- Грамматика типа 3 (автоматная, регулярная)
Пример. Грамматика, порождающая язык правильных скобочных выражений.
S → (S) | SS | ε
Порождение (вывод)
=> =>+ (1 или более) =>* (0 или более)
Сентенциальная форма грамматики — это строка, которая может быть выведена из стартового символа.
Предложение (сентенция) грамматики — это сентенциальная форма, состоящая из одних терминалов.
Язык L(G) грамматики — это множество всех ее предложений.
=>(lm) =>(lm)* =>(rm)+
Левый, правый вывод (порождение).
E → E + T | T T → T * P | P P → i | ( E )
Левый и правый вывод для предложения i + i * i
Дерево вывода (синтаксическое дерево, дерево разбора) строки предложения. В отличие от порождения, из него исключена информация о порядке вывода.
Крона дерева разбора — цепочка меток листьев слева направо
Грамматика, которая дает более одного дерева разбора для некоторого предложения, называется неоднозначной .
Пример неоднозначной грамматики. Грамматика арифметических выражений.
E → E+E | E*E | i
Два дерева разбора для цепочки i + i * i
Преобразование в эквивалентную однозначную грамматику:
E → E + T | T T → T * P | P P → i
Пример неоднозначной грамматики. Грамматика условного оператора
S → if b then S | if b then S else S | a
Два дерева разбора для цепочки if b then if b then a
Преобразование в эквивалентную однозначную грамматику:
S → if b then S | if b then S2 else S | a S2 → if b then S2 else S2 | a
Утверждение . Проблема неоднозначности произвольной КС-грамматики алгоритмически не разрешима
Леворекурсивные грамматики, их проблемы. Алгоритм устранения левой рекурсии.
Перевод (трансляция)
Ранее мы решали вопрос о принадлежности некоторой цепочки α интересующему нас языку L, задаваемому грамматикой G. Но задача компиляции шире: не только распознать входную цепочку, но и сгенерировать выходную.
Перевод с языка L1 на язык L2 — Пусть Σ и Δ — два алфавита (называемые «входным» и «выходным» соответственно). L 1 ⊂ Σ*, L 2 ⊂ Δ*. Переводом с языка L1 на язык L2 называется отображение τ: L1 → L2.
Чтобы решить указанную задачу (т.е. конструктивно определить перевод), можно встроить в процесс проверки принадлежности некоторые действия, формирующие на выходе желаемый результат.
Схема синтаксически управляемого перевода (СУ-схема)
СУ-схема — это грамматика, в которую с каждым синтаксическим правилом встроен элемент перевода.
Пример. Перевод алгебраического выражения в ПОЛИЗ (польская инверсная запись). Запишем правила грамматика вместе с элементами перевода.
E → E + T | E = E T + |
E → T | E = T |
T → T * P | T = T P * |
T → P | T = P |
P → (E) | P = E |
P → | P = |
Выведем цепочку a * (b + c) и одновременно переведём её в ПОЛИЗ: a b c + * (как обычно, используем левый вывод ):
(E, E) ⇒ (T, T) ⇒ (T * P, T P *) ⇒ (P * P, P P *) ⇒ (a * P, a P *) ⇒ (a * (E), a E *) ⇒ ⇒ (a * (E + T), a E T + *) ⇒* (a * (b + c), a b c + *)
Схема синтаксически управляемого перевода — это пятёрка
T = (N, Σ, Δ, R, S),
N — множество нетерминалов («переменных»), Σ — входной алфавит, Δ — выходной алфавит, S — стартовый символ (S ∊ N), R = .
Причём α и β в каждом конкретном правиле содержат одни и те же нетерминалы с точностью до перестановки.
Далее считаем, что задана некоторая СУ-схема T = (N, Σ, Δ, R, S).
Входная грамматика, соответствующая СУ-схеме T — это четвёрка
Gin = (N, Σ, R, S),
Источник: www.bourabai.ru