Основные понятия языка. Компьютерный учебник- Процедурно-ориентированное программирование. Что тут происходит
2.3.1. Понятие лексемы
Лексема
- это минимальная смысловая единица для языка
программирования.
Обычно к лексемам относятся константы, ключевые слова, знаки операций,
разделители и т.д.
- Процессу проведения лексического анализа (построение лексем из текста программы) предшествует несколько операций компилятора и встроенного в него препроцессора.
- Исходная программа записывается в виде текстового файла, созданного каким либо текстовым редактором. Обычно для компилятора основной единицей трансляции является файл с расширением.C или.CPP.
- Препроцессор первый просматривает исходный текст программы и определяет в нем свои специальные директивы. Например, директива #include.
Тема написания своего ЯПа не дает мне покоя уже около полугода. Я не ставил перед собой цель "убить" 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 (Б-Бдынъ) , Аникин Александр Евгеньевич. Словарь представляет собой расположенный в алфавитном порядке свод этимологии русской лексики, охватывающей основной словарный фонд русского языка. На основе достижений современной…