[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Микропроцессор + интерпретатор
HardWoman
Собственно интересует информация. По прочтении информации о взаимодействии микропроцессора компьютера и низкоуровневых программ остался непонятным следующий аспект.

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

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

Кстати вопрос - почему разработчиками микропроцессора не предусмотрена такая возможность? Собственного интерпретатора?

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

Желательно С++

Так же очень интересует логическая схема взаимодействия интерпретатора и компилятора. Да и не только схема - а по сути сам процесс и кодинг

Помогите пожалуйста - очень нужно.

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

Чем дальше - тем более непонятно. Если лексемы не базовые конструкции - так как их анализируют тоже некие конструкторы кода - то откуда найти ноги? Основу основ. Иначе получается, что ликсемы анализирует другой анализатор.



Спустя 7 часов, 21 минута, 10 секунд (2.01.2010 - 10:51) glock18 написал(а):
Я не в курсе существования ни одного языка низкого уровня, кроме Assembler.
Естественно команды любого языка, компилируются в какой-либо код. Как правило это либо машинный код, либо байт-код (java, php).

PS: С++ язык высокого уровня.

Цитата
Так же очень интересует логическая схема взаимодействия интерпретатора и компилятора. Да и не только схема - а по сути сам процесс и кодинг

они не взаимодействуют. это две по сути совершенно разные вещи.

Цитата
Кое что нашла о лексеме - надо ли понимать, что лексема некий отправной базовый синтаксис, используемый во всех языках программирования?

Чем дальше - тем более непонятно. Если лексемы не базовые конструкции - так как их анализируют тоже некие конструкторы кода - то откуда найти ноги? Основу основ. Иначе получается, что ликсемы анализирует другой анализатор.


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

пример разбора грамматики:
описание грамматики (предложения):
1. ab => A
2. cb => B
3. Ag => C
4. Bg => C
5. DC => D
6. C => D
7. D => S

разбор предложения делается посимвольно:
abgcbgabg

1. a
2. ab [1 - ab => A]
3. Ag [3 - Ag => C] [6 - C => D]
4. Dc
5. Dcb [2 - cb => B]
6. DBg [4 - Bg => C] [5 - DC => D]
7. Da
8. Dab [1 - ab => A]
9. DAg [3 - Ag => C] [6 - DC => D]
10. D [7 - D => S]

S - конечный символ разбора. Он должен получиться только тогда, когда в предложении больше не осталось символов (на этапах 3-4, 6-7 это было бы ошибкой). если осуществлен перевод в S, а символы еще остались, то значит предложение не принадлежит грамматике. и аналогично, если символы закончились, а перевод невозможен, то предложение так же не является предложением этой грамматики.

Это самый простой пример такой грамматики. Любой транслятор имеет в своем составе лексический анализатор, который разбирает исходный код по определенной грамматике. Правда разбор там делается в обратную сторону.

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

Спустя 7 часов, 48 минут, 12 секунд (2.01.2010 - 18:39) twin написал(а):
Вот Вась, как ты умеешь из простого сделать сложное... Ну не тот уровень же, Свете надо на пальцах.

Вот примерно так:
Есть маленький ребенок, ему говорят - низя палец в розетку. А сунешь - сам поймешь почему нельзя. Важно что это так.
Вот и низкоуровневые языки - бэйсик тот же (обожаю кстати), фортран и иже с ними примерно на таком уровне. розетка и палец.

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

По этому чем дальше, тем больше. Жить проще, но программировать сложнее.

Спустя 14 минут, 17 секунд (2.01.2010 - 18:54) waldicom написал(а):
Цитата (twin @ 2.01.2010 - 17:39)
Вот примерно так:
Есть маленький ребенок, ему говорят - низя палец в розетку. А сунешь - сам поймешь почему нельзя. Важно что это так.
Вот и низкоуровневые языки - бэйсик тот же (обожаю кстати), фортран и иже с ними примерно на таком уровне. розетка и палец.

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

По этому чем дальше, тем больше. Жить проще, но программировать сложнее.

Если из рассказа Глока можно понять почти все, то понять из "розетки и пальца" нельзя ничего... Реально не в тему, вообще.

Цитата (twin @ 2.01.2010 - 17:39)
Вот и низкоуровневые языки - бэйсик тот же

гм-гм..

Спустя 23 минуты, 25 секунд (2.01.2010 - 19:17) glock18 написал(а):
Да, бейсик не низкоуровневый, а высокоуровневый язык.

Вообще, любой язык где есть хотя бы двумерные массивы - уже не низкоуровневый. а в бейсике наверняка есть еще и динамические (а-ля Vector или List), тогда и говорить об уровне языка смысла нет. Высокий, и все.

ЗЫ: я там правила, оказывается в обратном порядке записал. (A => ab надо, а не ab => A). ну да не так важно.

Спустя 1 минута, 57 секунд (2.01.2010 - 19:19) glock18 написал(а):
twin
Реально не понял ничего про "низя палец в розетку". Не, ну мне просто показалось, что Светлане хочется услышать "почему так", а не что "так, и все".

Постановка вопроса, конечно, забавная. Микропроцессор, интерпретатор smile.gif но я понял под ними, что Светлана хочет детали

Спустя 4 часа, 36 минут, 38 секунд (2.01.2010 - 23:56) HardWoman написал(а):
Постановка вопроса от недопонимания процесса. Скажу по другому. Консольная програ на которой пишется ПО и php (вебязык).

В С++ в частности есть свой интерпретатор - вот и интересует его расширяемость - отсюда возник вопрос - как?

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


Читала про лексемы. Не поняла следующего. Говорят - можно создать свой язык программирования. Приводят пример лексем - то есть базис.

И тут же загоняют эти лексемы для разбора в кодинг с классами и другими сложными конструкциями.

Вероятно писать лексемы нужно начинать со структурных элементов - тех же классов, операторов сравнения. Пусть так.

Пусть есть первые написанные лексемы в блокноте - как запустить этот язык на исполнение. Если условие - новый язык и обрабатывать лексемы как? Сами себя?

Николай про палец в розетку ты конечно загнул smile.gifsmile.gif Я же читаю все таки

Кстати еще вопрос - есть ли работающие успешно ООП СУБД

И что есть форма Бакуса - Наура? Это базисный синтаксис?

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

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

Спустя 1 час, 22 секунды (3.01.2010 - 00:56) sergeiss написал(а):
HardWoman - если честно говорить, то я, может быть, не всё понял в вопросах smile.gif
Но glock18 правильно сказал насчет ассемблера. Потому что ассемблер - это практически написание в машинных кодах. Его компилятор делает простую вещь: переводит написанное человеком в реально машинных код "один в один", пропуская комментарии. И затем полученный файл "обзывается" исполняемым файлом (*.exe) и может быть передан на исполнение.
Поэтому для максимального понимания основ программирования полезно хотя бы что-то сделать на ассемблере. Не надо ничего сложного писать, типа игр!!!
Для начала просто вывести строку на экран - это уже целая проблема smile.gif Надо писать свою функцию. Потому что на "низком" уровне можно вывести только один знак.
И всё это как раз приведет к пониманию принципов работы процессора, его взаимодействия с БИОСом, и работы других базовых вещей (да то же открытие файла, например, и работа с данными в файле). В том числе и про такую штуковину, как "прерывание".

Я сам когда-то давно этим интересовался. Не для работы, а "чисто для себя". И это мне как раз дало понимание основ работы BIOS'а и его взаимодействия с процессором, дисками, портами и другими прибамбасами.

Спустя 46 минут, 52 секунды (3.01.2010 - 01:43) glock18 написал(а):
HardWoman
Честно говоря, читая твои размышления, у меня иногда начинает болеть голова.

Вопрос "расширения компилятора" - это что-то абсурдное. Первое - синтаксис C++ как и любого другого языка, утверждается специальной комиссией.

Второе - убежден на 1000%, что существующих способность хватит выше крыши.

Цитата
В С++ в частности есть свой интерпретатор

Еще раз: в C++ нет интерпретатора. у С++ есть компилятор, у которого есть лексический анализатор. Интерпретатор и компилятор два совершенно разных типа трансляторов.

Цитата
Пусть есть первые написанные лексемы в блокноте - как запустить этот язык на исполнение. Если условие - новый язык и обрабатывать лексемы как? Сами себя?


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

Цитата
Кстати еще вопрос - есть ли работающие успешно ООП СУБД

Успешно, кажется нет пока. Есть просто работающие, но примеры я не смогу назвать. Единственно, что приходит в голову из реально работающего сегодня - паттерн Active Record и ORM. Но это обычная программная обертка вокруг обычной реляционной субд.

Цитата
И что есть форма Бакуса - Наура? Это базисный синтаксис?

Форма Бэкуса-Науэра - это стандартная форма записи правил. Хорошо подходит для записи правил формальной грамматики.

Цитата
Мне для успешной работы это полезно знать. К чему стремиться. Может когда нить дорасту не только до переопределения логики высокоуровневой надстройки, но и до переопределении логики микропроцессора. В любой случае понимание его работы мне не помешают


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

Спустя 1 час, 25 минут, 16 секунд (3.01.2010 - 03:08) twin написал(а):
Про палец с розеткой я загнул конечно, это из личного... Я когда был маленький - меня всегда к электричеству тянуло. И вопросы похожие в голове роились, как это и почему работает. Не долго думая я приступил к практическому изучению момента: сунул в розетку мамкину шпильку. Нужно, очень было нужно, узнать, как это все работает. Был дикий крик и шкандаль, но это меня не только не остановило - даже наоборот.

Я до сих пор сую туда всякую гадость, только в более изощренной форме. Теперь у меня вместо шпильки компьютер.

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

А Света сразу замахнулась на уровень, который на порядок выше даже пыхи. В желании упростить жизнь. Это крайне похвально но очень сложно осуществимо.

Именно потому, что прежде чем воткнуть в розетку шнур от компа, обычно туда суется палец.

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

Хотя все это ИМХО. smile.gif

Спустя 5 часов, 25 минут, 43 секунды (3.01.2010 - 08:34) HardWoman написал(а):
Цитата
Вопрос "расширения компилятора" - это что-то абсурдное

Во первых не компилятора - а лексического анализатора.

В связи с новыми определениями логики проекта могли понадобится некие спец конструкции, лог метки и зарезервированные символы. Это я называю расширяемостью.

А в остальном - извините за беспокойство.

Спустя 2 часа, 51 минута, 56 секунд (3.01.2010 - 11:26) glock18 написал(а):
Цитата
Во первых не компилятора - а лексического анализатора.

я понял, что ты имела ввиду

Цитата
В связи с новыми определениями логики проекта могли понадобится некие спец конструкции, лог метки и зарезервированные символы. Это я называю расширяемостью.

в C есть и то, и другое.


_____________
Сложные иерархии рулят!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.