Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.54.7] |
|
Сообщ.
#1
,
|
|
|
Большинство языков высокого уровня имеют в отличае от ассемблера, схожий синтаксис построения логики связей его элементов. Далее любой высокоуровневый язык переводится в ассемблер.
Я задался вопросом, реального существования, высокоуровневого языка, с построением синтаксически- логической связи, близкой к языку ассемблера а не типичной для большинства языков, построения логической связи. Существует язык программирования советских микро калькуляторов электроника ПМК. Этот язык, близок к ассемблеру и по смыслу напоминает логику построения синтаксиса, которую я бы хотел встретить в другом, неизвестно существующем ли кроме, языке. Или логику близкую по смыслу и далекую от типичной. Добавлено Я почему бы задался таким вопросом. Из за имения собственного желания "написать" собственный компилятор, транслирующий логику высокоуровнивика в ассемблер. Но слишком рано осознал бы сам, что типичная принятая в большинстве языков, система связи команд, транслировалась бы на ассемблер, слишком сложно. В то время как мне понятно что высокий уровень - можно обозначить проще и проще транслировать. Добавлено По соображениям поднятого вопроса, получалось бы что такие языки как: C++, Pascal, basic, prolog, - имели бы некий единый неприемственный к данному вопросу стиль обозначения логики связи их элементов. Добавлено По образу, искомый язык походил бы на набор ссылок, подразумевающих последовательно расположенные блоки команд ассемблера. Короче говоря состоял бы из ссылок на эти блоки команд. Но типичный ассемблер с поддержкой типично синтаксичных макросов, сдесь также не подходил бы. |
Сообщ.
#2
,
|
|
|
Forth?
|
Сообщ.
#3
,
|
|
|
Цитата AVA12 @ На мой взгляд, описание сумбурное, но в целом лучше всего подходит именно форту.Forth? Цитата Ximial @ Хорошее желание, но только не старайся написать транслятор, который обязательно найдёт где-то применение. Попробуй написать что-то для себя. получится хорошо - будешь потом пользоваться, и может, окружающим понравится. Не получится - без особых сожалений отставишь проект в сторону. зато опыта наберёшься. А иначе все силы потом будут уходить на то, чтобы как-то протолкнуть почти наверняка неудачную программу. собственного желания "написать" собственный компилятор |
Сообщ.
#4
,
|
|
|
Для транслятора, разница должна была бы быть слишком большая.
Я имею ввиду трансляцию в названную логику. А ассемблер я бы предполагал не чистый а какой нибудь внутренний, типа ассемблера в Паскале. Добавлено Синтаксис я бы выбрал такой. И этот выбор был бы понятен в связи с имением написать транслятор. В этом случае, например было бы понятно, что принятая в большинстве языков арифметическая логика связей переменных типа: F=x+r Была бы сложновата для транслирования. Сложнее чем, логика уже существующая в каком то калькулятором языке, а может и еще где, например: F=x r+ Т.е ставя знак арифметического действия позади уравнения. Этот выбор был бы понятен, потому что переменных могло бы быть и больше. К примеру: F= x r t+- Подразумевая запись F=x+r-t; Отсутствие чередования знаков действий и переменных, давало бы упрощение в их трансляции на ассемблер. Ну как то так и как-то дальше. |
Сообщ.
#5
,
|
|
|
Цитата Ximial @ Тогда уж действуй до конца присваивание тоже в конец перенеси.F=x r+ Т.е ставя знак арифметического действия позади уравнения. Этот выбор был бы понятен, потому что переменных могло бы быть и больше. К примеру: Цитата Ximial @ Если подходить к делу внимательнее, то эта запись эквивалентна F = x - (r + t)F= x r t+- Подразумевая запись F=x+r-t; Почитай, кстати, про FORTH. Узнаешь много больше, чем тыкаясь здесь вслепую. |
Сообщ.
#6
,
|
|
|
Цитата F= x r t+- Подразумевая запись F=x+r-t; Во-первых неправильно, во-вторых не додумал мысль до конца. В чем смысл обратной польской записи, что за ней стоит? А стоит за ней абстрактная стековая вычислительная машина. И каждая команда выполняет следующую последовательность действий: снимает со стека N элементов (N может быть равно нулю), выполняет над этими элементами какую-либо операцию и кладет обратно в стек M элементов результата (M тоже может быть равно нулю). В обратной польской записи последовательность F = x r t + - не имеет смысла, зато имеет смысл что-нибудь вроде x r + t - F =. Ну или x @ r @ + t @ - F ! - это уже кусок кода на форте (если я ничего не напутал). |
Сообщ.
#7
,
|
|
|
Ну построение синтаксиса под действия с калькулятором стеком, понятное дело оправдана.
А смысл указанной мной формы записи, не обязательно бы ссылался именно на подобный стек, а просто позволял бы упрощать задачу трансляции (перевода высокоуровневого языка в ассемблер), да и программистскую задачу преобразования и распознания синтаксиса, до этого. И тогда было бы понятно, что распознание программой формулы, где переменные находятся в смешанном со знаками арифметических действий виде, является задачей более затруднительной,чем когда они находятся отсортированными друг от друга. Как и другие методы представления, типично высокоуровневоязыковой логики, являются менее удобны для простой трансляции. Добавлено Ясное дело, что с моей позиции, следовало бы ссылаться на механику типа калькулятор него стека. Указывать только один знак действия, позади уравнения, и в целом, членить длинное уравнение на составляющие его действия. Но например представленное действие со скобками, есть само по себе то, от чего я и хочу избавиться в синтаксисе. Сомо по себе включение в уравнение скобок, это какая-то тень на плетень. Тогда как я не собирался бы развивать универсальных уравнений и мог бы выполнять действия сложения и вычитания, к примеру, раньше умножения и деления, освобождаясь от правил математики. |
Сообщ.
#8
,
|
|
|
Да что такого страшного в скобках? Если речь идет о математических выражениях, то существует простой и понятный алгоритм, преобразующий инфиксную запись со скобками и приоритетами в обратную польскую. Да и синтаксический анализ языков программирования (кроме, естественно, C++) - задача для нормального программиста далеко не архисложная. К тому же есть различные "компиляторы компиляторов", преобразующие описание синтаксиса в скелет парсера.
И кстати, какую задачу ты перед собой ставишь ("написать компилятор" на задачу не тянет, это только способ решения)? И что ты уже умеешь? |
Сообщ.
#9
,
|
|
|
Цитата AVA12 @ Не напутал.это уже кусок кода на форте (если я ничего не напутал). Есть правда в форте хитрости, позволяющие, например, для переменной определить сразу несколько слов, одно для получения адреса, другое для извлечения данных, третье для запоминания. Тогда запись можно немного укоротить: x@ r@ + t@ - F! На практике этого обычно никто не делает - экономия памяти никакая (если переменная редко используется, то памяти надо даже больше), по скорости тоже заметного выигрыша нет. Синтаксис форта прост до безобразщия - программа на нём это просто последовательность слов, ограниченных пробелами (или, иногда, другими символами). Каждое слово либо транслируется в код (для большинства это адрес исполняемой части, или, для чисел - команда загрузки литерала с последующим значением), либо сразу выполняется. |
Сообщ.
#10
,
|
|
|
Для Profi:
Да я как то, особо много не умею. Разве что язык Паскаля. На изучение остальных языков, меня не тянет. Много слышал о трансляторах, декомпиляторах, дизассемблерах, слышал и о компиляторах компиляторов. Но как то иметь с этим дело не тянуло. А тянуло все создать только с помощью компилятора и написанных на нем мною программах. Когда то производил попытку создать подобие компилятора. Но это был скорее сшиватель данных в один общий файл. Т.е можно было написать исходник файла, который поддерживал как шестнадцатиричные, так и буквенное представление данных. Можно было написать слово-ссылку, и вместо него выставлялся длинный шестнадцатиричные код. Писал я его, используя только собственные подпрограммы, и никогда не ссылался на подпрограммы предоставленные с самим компилятором. Но и это, была очень большая работа, и программного текста набралось очень много. Добавлено Но форт, наверно безусловно подойдет, хотя бы только по той причине что он является языком очень старым. А постольку должен быть рассчитан на машины маломощные, в связи с чем, и длинна программы его транслятора, должна не слишком расходовать ресурсы компьютера. Следовательно его синтаксис должен быть действительно прост. |
Сообщ.
#11
,
|
|
|
Цитата Да я как то, особо много не умею. Разве что язык Паскаля. Ясно, тяжелый случай. Рано тебе еще о компиляторах думать. Сначала сделай строковый калькулятор, принимающий выражение из чисел, операторов и скобок и возвращающий результат. Это самый базовый минимум умений. Следующий шаг: возможность использовать именованные переменные и константы и сохранять результат выражения в переменной. Следующий шаг: использование и задание функций (не забыть про локальные переменные и рекурсию). Следующий шаг: управляющие конструкции (хотя бы if и for). И вот когда такой калькулятор будет работать, тогда уже можно начинать задумываться о полноценном компиляторе. |
Сообщ.
#12
,
|
|
|
У меня игрушка, вот такая была:
Pronouns> Word = f0 e4 b4; End> C_f5 ff 48; W_word 45332; Word; End. Вот, так выглядел на нее исходник. То, что было между первыми английскими словами, называлось местоимениями. Т.е. Если я пишу определенное слово из местоимений, то вместо него вставляется шестнадцатиричные данные, обозначенные после знака "равно". C_ - означало что после этого может быть только шестнадцатиричные код. W_ означало - вставку слова написанного в таком виде в каком написанно. Предпологалось также сделать ссылки на файлы, которые моги бы быть слиты в один общий файл вместе с написанными словами и кодами, но до этого руки не дошли. Были и другие обозначения но их там было одно или два, я их не очень помню. |
Сообщ.
#13
,
|
|
|
Цитата AVA12 @ Собственно рабочий строковый калькулятор это уже и есть транслятор. Язык правда очень простой.И вот когда такой калькулятор будет работать, тогда уже можно начинать задумываться о полноценном компиляторе. Цитата Ximial @ По-моему, даже Hello, world! выглядит внушительнее У меня игрушка, вот такая была: |