Основные понятия языка. Компьютерный учебник- Процедурно-ориентированное программирование. Что тут происходит

2.3.1. Понятие лексемы

Лексема - это минимальная смысловая единица для языка программирования.
Обычно к лексемам относятся константы, ключевые слова, знаки операций, разделители и т.д.

  • Процессу проведения лексического анализа (построение лексем из текста программы) предшествует несколько операций компилятора и встроенного в него препроцессора.
  • Исходная программа записывается в виде текстового файла, созданного каким либо текстовым редактором. Обычно для компилятора основной единицей трансляции является файл с расширением.C или.CPP.
  • Препроцессор первый просматривает исходный текст программы и определяет в нем свои специальные директивы. Например, директива #include.

Важно отметить, что препроцессор не знает синтаксиса С.

2.3.2. Пространство между лексемами

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

Например, рассмотрим две последовательности: int i; int j;
и
int i;
int j;

Эти две последовательности символов с точки зрения лексического анализа являются эквивалентными, т.к. имеют всего 6 лексем:

  1. float

2.3.3. Запись длинных строк

Для записи длинных строк символов используется обратная косая черта (\). Она ставится в конце строки. Обратная косая черта и символ перевода строки игнорируются, две строки (и более) воспринимаются как одно целое. Например: “Томский государственный\ университет систем управления\ и радиоэлектроники”

Здесь записана одна длинная строка символов.

2.3.4. Комментарии

Комментарии представляют собой фрагменты текста, предназначенные для записи пояснений. Комментарии предназначены для программистов, которые будут читать исходный текст. Комментарии в процессе трансляции программы игнорируются. Комментарии можно записать двумя способами. В первом способе комментарий открывается парой символов /*, а закрывается символами */. Например: int /* объявить */ i /* счетчик */ ;

В процессе трансляции будет получено всего три лексемы: int, i, ;

Второй способ записи комментария в С++ состоит в записи двух подряд символов «косой черты» (//). Комментарий начинается от этих символов (//) и заканчивается символом перевода строки. Например: class X // это комментарий;
... ;

Следует быть осторожным в использовании /* и // одновременно. Это может привести к нежелательным последствиям. Например: int i = j//* разделить на k */k;
+m;

Здесь вместо выражения int i = j / k; +m; получим int i = j + m;

Тема написания своего ЯПа не дает мне покоя уже около полугода. Я не ставил перед собой цель "убить" CoffeeScript , TypeScript , ELM , тысячи их , я просто хотел понять кухню и как они вообще пишутся.


К моему неприятному удивлению, большинство из этих языков используют Jison (Bison для JavaScript ), а это не совсем попадало под мою задачу - "понять", так как по сути дела Jison делает все за вас, собирает AST по заданным вами правилам (Jison как таковой отличный инструмент, который делает за вас львиную долю работы, но сейчас не о нем).


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


Стоит заметить, что данное руководство не привязано к JavaScript , он выбран исключительно из соображений скорости разработки и читаемости, так что вы можете написать свой "лисп"/"питон"/"ваш абсолютно новый синтаксис" на любом знакомом вам языке.


Также до момента написании компилятора (в нашем случае транслятора), процесс написания языка не отличается от процессов создания языков компилируемых в ASM /JVM bitcode /LLVM bitcode /etc , а это значит, что данное руководство не ограничивается созданием языка трансляцируемого в JavaScript .


Весь код, который будет написан в данной (и последующих статьях), лежит на Github"е. Тегами обозначены начало и концы статей для удобства.

Немного теории

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


source code -(Lexer)-> tokens -(Parser)-> AST -(Compiler)-> js code

Что тут происходит:

1) Lexer

Исходный код нашей программы разбивается на лексемы . По-простому это нахождение в исходном тексте ключевых слов, литералов, символов, идентификаторов и т.д.


Т.е. на выходе из этого (CoffeeScript ):


a = true if a console.log("Hello, lexer")

Мы получаем это (сокращенная запись):


Так-как CoffeeScript отступо-чувствительный и не имеет явного выделения блока скобками { и } , блоки отделяются отступами (INDENT ом и OUTDENT ом), которые по сути заменяет скобки.

Ы, ж. lexème m. < lexis слово, выражение, оборот речи. лингв. Единица словаря языка в совокупности ее словоизменительных форм и значений. Ляпсус. Наиболее вероятным кажется здесь французское и польское посредничество, которое вообще… … Исторический словарь галлицизмов русского языка

Последовательность допустимых символов языка программирования, имеющая смысл для транслятора. Транслятор рассматривает программу как последовательность лексем. См. также: Синтаксис языков программирования Трансляторы Финансовый словарь Финам … Финансовый словарь

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

- (от греч. lexis слово выражение), единица лексического уровня языка, слово во всей совокупности его лексических значенийБольшой Энциклопедический словарь

ЛЕКСЕМА, ы, жен. В языкознании: отдельное слово во всей системе его значений и форм. | прил. лексемный, ая, ое. Л. анализ. Толковый словарь Ожегова. С.И. Ожегов, Н.Ю. Шведова. 1949 1992 … Толковый словарь Ожегова

Сущ., кол во синонимов: 3 прототермин (1) слово (72) терминоид (1) Словарь с … Словарь синонимов

Лексема - ЛЕКСЕМА ассоциативная группа, составляющаяся из отдельных слов (см. «Слово отд.»). Всякое слово может быть сходно с другим словом или целиком или какой либо своей частью (или частями). С другой стороны, сходство может быть в звуках или в… … Словарь литературных терминов

ЛЕКСЕМА - ЛЕКСЕМА. 1. Основная единица лексического строя языка, слово, рассматриваемое как единица номинации. 2. Звуковая или графическая сторона слова, воспринимаемая независимо от его содержания … Новый словарь методических терминов и понятий (теория и практика обучения языкам)

лексема - лексема. Произносится [лексэма] … Словарь трудностей произношения и ударения в современном русском языке

лексема - Языковая конструкция, по соглашению представляющая элементарную синтаксическую единицу. [ГОСТ 28397 89] Тематики языки программирования EN (lexical) tokenlexical unit … Справочник технического переводчика

Книги

  • Русский этимологический словарь. Выпуск 5 (буба I - вакштаф) , Аникин Александр Евгеньевич. Словарь представляет собой свод этимологам, охватывающий основной словарный фонд русского языка. На основе достижений современной филологической науки в нем рассматривается происхождение и…
  • Русский этимологический словарь. Выпуск 2 (Б-Бдынъ) , Аникин Александр Евгеньевич. Словарь представляет собой расположенный в алфавитном порядке свод этимологии русской лексики, охватывающей основной словарный фонд русского языка. На основе достижений современной…


Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: