Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

А нужен ли компилу лексер?

19.04.2011, 11:17. Показов 2880. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем нужен лексер? Вроде бы для перобразования исходного текста в последовательность внутреннего представления лексем. А почему бы не ввести всостав среды разработки редактор сразу представления, являющегося входным для следующего этапа после лексическго анализа? Вот на zx-spectum 48K например программы набирались сразу в байт-коде, являвшемся внутренним представлением бейсика, а потом этот байт-код интерпретировался. И каждый оператор набирался за одну кнопку, а обозначался одним байтом. Ну так почему бы отсюда и не пойти? При наборе строки сразу кодировать операторы и явные константы, распределять адреса переменных, парсить выражения, а компилу давать уже готовые лексемы вместо букв? Почему в большинсве случаев идут по пути набора plain-текста? Причём, редакторы тоже явно умеют разбирать исходники, что видно по подсветке синтаксиса.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2011, 11:17
Ответы с готовыми решениями:

Калькулятор (Лексер + Парсер)
Не знаю куда лучше.. Попробую тут, если что - пожалуйста перенесите в нужное место... Написал класс который решает математические...

Как конкретно установить SSD, какой нужен (и нужен-ли) шлейф дополнительный?
нутбук: HP Pavilion dv7 (извиняюсь - забыл про полное название. но AMD 4 ядра, 6Gb озу. видео Dual Graphics. имхо: не важно это щас.) сам...

Компилятор жалуется, что нужен Boolean,, и наоборот, нужен integer
program rascheturona; var armor, armorbypass, gotdam: Real; stddam :Integer; x : Boolean; begin; ; ...

20
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.04.2011, 13:27  [ТС]
При чём здесь совок? Спектрум - английская машина. Правда, у меня был её сокофицированный вариант под названием Delta C, но проги для спектрума её признавали за спектрум. И при чём здесь астрал? В студии пробовал исходник на плюсах набрать? Встроенный редактор подсвечивает синтаксис, значит вполне в сосоянии разлобрать исходник. Или лазарус:
Миниатюры
А нужен ли компилу лексер?  
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.04.2011, 13:39  [ТС]
Подсветка синтакисиа видан невооружённым глазом, значит и здесь редактор исходника способен его разобрать. А спектрумовские проги я грузил в редактор кода и там ясно был виден байт-код, в котором каждый многобуквенный оператор обозначался одним байтом. И я даже иногда правил этот код прямо в редакторе кода, подглядывая коды операторов по справочнику, а чаще по памяти, а при загруке этих файлов обычным мергом коды снова выглядели как искходник на бейсике, но уже с дургими операторами. Причём, я мог добиться, чтоб эти проги вгылдяели нечитабельно и при повторном редактировании строк в редакторе бейсик-программ приходили в полную негодность, но при загрузке лоадом запускались, сохраняя тип бейсик-файлов. И мог наоборот прочитать аналогично защищённые, но чужие проги, внести свои изменения прям так, не снимая защиты, или снять защиту и загрузить потом в редактор бейсика мергом. Сейчас я уже не помню ни конкертных кодов, ни структуры кода и не смогу прямо в байт-коде ничего написать, но весной 1995-го умел. Вопрос: почему по этому пути пошёл одни Клайв Синкелр? В мануале было прямо сказано, что в редактор бейсика байт-код генерит налету при наборе каждой строки. Если даже спектрум с этим справлялся (меньшше четырёх мегагерц, 980 000 кажется операций в секунду), то почему бы не положить это в основу какой нибудь нормальной среды разработки? Спектрум имел контекстную раскладу клавы, когда нужен опратор, то нажатие например, p давло сразу PRINT, l - LET, i - INPUT и так далее.
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
03.05.2011, 03:14
оно-то так...
с таким раскладом может сразу бинарники писать?))

маленькие программы может и можно накидать вот так вот и скормить парсеру, но для больших проектов это просто жуть.

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

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

в смысле что я хотел сказать - не всегда лексер генерит хоть сколько-то бы ни было понятные человеку сущности

Добавлено через 6 часов 5 минут
кстати, относительно лексеров и парсеров, развивая тему.
HTML, php ведь не обрабатываются лексером например, а сразу парсятся.

это не компиляция конечно, а интерпретация, тем не менее, вэб-программисты пишут исходник уже сразу лексемами, если можно так выразиться.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.05.2011, 05:50  [ТС]
Цитата Сообщение от resource2008 Посмотреть сообщение
с таким раскладом может сразу бинарники писать?))
Сам понял, чито спросил? Ведь набирается не ассемблерный код, а текст на высоком уровне. Возьёмм тот же c. Отличия от ассемблера там не ограничиваются лишь синтакисисом и поддержкой переменных. А еслиб ограничивались, то зачем c? Есть же нормальные продвинутые ассемблеры с поддрежкой тех же самых переменных, а макроассемблер поддерживате даже макросы. Но сям ещё за чемто понадобилось присваивание целых структур, а
C
1
c=a+b;
,
C
1
d=a-b;
.
C
1
e=a*b;
.
C
1
f=a/b;
вообще не имеют ассемблерных аналогов. И, наоборот, на сях нет доступа к флагам даже займа/переноса. Нет и прерываний, поддерживаемых даже паскалем. Вообще нет ничего низкоуровневого. А бейсик? С него тоже сразу бинарник делать?
Цитата Сообщение от resource2008 Посмотреть сообщение
маленькие программы может и можно накидать вот так вот и скормить парсеру, но для больших проектов это просто жуть.
Спектруму можно за раз скормить килобайт 30, причём, наброать сразу байт-код. С учётом особенностей самой машины для неё такой проект просто огромен, а винда виста на его фоне для нормальных машин малявкой выглядит.
Цитата Сообщение от resource2008 Посмотреть сообщение
ломать голову, сидя за справочником,
Зачем? На спектруме, например, была контекстная раскладка и при нажатии нужной кнопки сразу получаелся нужный код сразу оператора, а не отдельной буквы, когда нужен оператор, а когда нужна переменная, то тем же способюом набирался уже другой код.
Цитата Сообщение от resource2008 Посмотреть сообщение
по моему более человекоподобные слова куда гораздо приятнее и понятнее
А куда человекопнятнее, чем
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
10 INPUT N
20 DIM A(N, N)
30 DIM B(N)
40 DIM X(N)
50 FOR I=1 TO N STEP 1
60 FOR J=1 TO N STEP 1
70 INPUT "A(";STR$(I),",";STR$(J);")=";A(I,J)
80 NEXT J
90 INPUT "B(";STR$(I);")=";B(I)
100 NEXT I
110 FOR I=1 TO N-1 STEP 1
120 FOR J=I+1 TO N STEP 1
130 LET Z=A(I,I)/A(J,I)
140 FOR K=I TO N DO
150 LET A(J,K)=A[J,K)-A(I,K)*Z
160 NEXT K
170 LET B(J)=B(J)-B(I)*Z
180 NEXT J
190 NEXT I
200 FOR I=N TO 1 STEP -1
210 LET S=0
220 FOR J=I+1 TO N STEP 1
230 LET S=S+X(J)*A(I,J)
240 NEXT J
250 LET X(I)=(B(I)-S)/A(I,I)
260 NEXT I
270 FOR I=1 TO N STEP 1
280 PRINT "X(";I;")=";X(I)
290 NEXT I
? Но если набирать на спектруме, то наберётся сразу внутренее представление, а на экраене будет приведённый здесь текст. И при сохранении сохранится внутренее представление. И загрузится при повторной загрузке внутренее представление, а на экране опять будет исходный текст программы. Причём, внутреннее представление - байткод.
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
03.05.2011, 21:53
Цитата Сообщение от taras atavin Посмотреть сообщение
вообще не имеют ассемблерных аналогов
* в одну команду не имеют аналогов
в результате она разложится на две (теоретически, на практике на несколько команд больше)

Цитата Сообщение от taras atavin Посмотреть сообщение
А куда человекопнятнее, чем ...
и?
я в бэйсике код давным давно тоже набирал, правда на Робике (поддержим отечественного производителя ).
и справочник по языку тогда влазил в тетрадку на 12 страниц с примерами и пометками, и с подробным описанием.

может я не правильно понял, но идея темы состоит в том, что лексер фактически переливает наш исходник "из пустого в порожнее" и нужно ли оно нам? может сразу писать лексемы и отдавать парсеру?)))
и еще, это касательно большинства современных компиляторов мысли?)
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
03.05.2011, 21:59
Цитата Сообщение от resource2008 Посмотреть сообщение
может я не правильно понял, но идея темы состоит в том, что лексер фактически переливает наш исходник "из пустого в порожнее" и нужно ли оно нам? может сразу писать лексемы и отдавать парсеру?)))
простой лексический анализатор убирает пробельные символы, пересчитывает переменные, выкидывает комментарии
то о чем уже пошла речь - это уже компилятор
о чем говорит автор - ниасилил
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.05.2011, 05:20  [ТС]
Цитата Сообщение от resource2008 Посмотреть сообщение
сразу писать лексемы и отдавать парсеру?))
Да, но не в ручную же.
Цитата Сообщение от resource2008 Посмотреть сообщение
лексер фактически переливает наш исходник "из пустого в порожнее"
Нет. Просто мне не понятно, зачем лексический анализ в виде отдельного этапа и лексер в виде отдельного модуля/функции и почему нельзя его задачи передать редактору и вообще отказаться от txt в качестве машинного представления.
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
04.05.2011, 17:21
Цитата Сообщение от taras atavin Посмотреть сообщение
отказаться от txt
с одной стороны согласен, а с другой - нет.
это ведь невероятно гибкий и уже готовый формат, хотя во многом и неудобный.

Цитата Сообщение от taras atavin Посмотреть сообщение
зачем лексический анализ в виде отдельного этапа
а как его по другому реализовать? это в любом случае будет отдельный этап или под-этап.

Цитата Сообщение от taras atavin Посмотреть сообщение
и почему нельзя его задачи передать редактору
и когда мы меняем или совершенствуем редактор нам нужно постоянно "шаманить" над "встроенным лексером"? а так модуль подключили - и все, да и с другой стороны, при изменениях в в самом языке программирования достаточно изменить лексер/парсер.
как там золотое правило гласит: "Разделяй и властвуй"

тем более, что есть редакторы, в которых анализ производится "на лету". это касается не только подсветки синтаксиса, но и поиска ошибок в коде, различных Tool Tip-ов и т.д. и т.п. - фич на самом деле масса, они ведь опираются как раз на лексер по идее, на "понимание" написанного текста.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
04.05.2011, 19:55
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. Просто мне не понятно, зачем лексический анализ в виде отдельного этапа и лексер в виде отдельного модуля/функции и почему нельзя его задачи передать редактору и вообще отказаться от txt в качестве машинного представления.
совместимость же между разными редакторами/компиляторами итп
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.10.2023, 15:17
taras atavin, кстати да, тоже только что взбрела эта идея.
Почему бы не хранить исходники во внутреннем лекс-коде, который способен "делексироваться" обратно в текст программы.
В отличие от объектного кода, dll или exe, поток токенов можно практически без потерь преобразовать обратно(наверное потеряются лишь директивы препроцессора(если это язык си), комментарии, и отступы в коде - но это мелочи)
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
18.10.2023, 15:39
Kuzia domovenok, открой для себя C# и Java. Байт-код там на ура назад в исходники перегоняется.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.10.2023, 20:19
Usaga, я не про декомпиляцию исходников, я про хранение их в виде абстрактной цепочки токенов языка программирования до какой-либо интерпретации-компиляции их в код
C#
1
s = p*(p-a);
Хранить как
Code
1
<var id=0><op id=0><var id=1>...и.т.д.
где каждый<>это байт или слово
То есть итоговый код все равно не исполнить даже на вирт.машине, его в любом случае предстоит парсить и генерить исполняемый код
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
19.10.2023, 02:51
Kuzia domovenok, ну, я и говорю: смотри С# и Java. Там как раз байт-код JIT'от в исполняемый перегоняется.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
19.10.2023, 13:33
Usaga, байт код это уже исполнямый виртуальной машиной код, а токены это токены
токены однозначно привязаны к используемой лексике исходной программы, байт код - что-то вроде ассемблера, просто он для более умной, чем железный процессор, машины java
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
20.10.2023, 05:30
Kuzia domovenok, и в чём смысл держать в бинарнике лексемы исходника? Польза практическая в чём?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.10.2023, 10:12
Usaga, так редактировать в IDE текст чтобы. Экзешник тоже будет, лексемы это не для запуска из них программы а для запуска из них визуального редактора который преобразует их в текст для программиста
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
20.10.2023, 10:28
Kuzia domovenok, зачем, бога ради?
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.10.2023, 21:42
Цитата Сообщение от Usaga Посмотреть сообщение
в чём смысл держать в бинарнике лексемы исходника? Польза практическая в чём?
Реверс облегчается. Forth тому пример.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
21.10.2023, 10:05
vantfiles, я понимаю, что он облегчается. Но это же побочный эффект задумки. А основной смысл какой может быть? Пихать, по сути, исходники в исполняемые файлы, раздувая их размер, чтобы что?

Я понимаю скриптовые языки. Там исходники распространяются потому, что нет стадии компиляции. А тут и компиляция, и код поставляется. Потребительские качества такого бинарника чем и для кого улучшаются? Точно не для конечного пользователя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2023, 10:05
Помогаю со студенческими работами здесь

СМА Gorenje WA61101/02, Нужен номинал резистора, Нужен номинал резистора
Привезли стиралку, нет нагрева. При осмотре обнаружен сгоревший резистор. Клиент дома переносил машинку на другое место. ...

СМА Indesit WIN602(EU), нужен дамп прошивки или конфиг, не включается, нужен дамп прошивки или конфиг
После ремонта блока питания и замене ШИМ, СМА не включается поделитесь пожалуйста дампом прошивки или конфиг СМА Indesit WIN602(EU)...

СМА Whirlpool AWM245 нужен номинал R6, Whirlpool AWM245 нужен номинал R6
Задымился , расплавился и замкнул УБЛ. На модуле выгорел резистор R6 и дорожка к нему, наверняка накрылась и TDA1085C. Подскажите...

Нужен ли let?
Приветствую, друзья. Тупой вопрос от новичка по циклу. Есть ли разница в этих написаниях: for (i = 0; i &lt; a; i++) {} и for...

Нужен ли он?
Размышляю, нужно ли регистрировать сайт в я.каталоге. Собрал статистику - из нашей рубрики на сайт будет идти 1-2 человека в день. Т.е....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru