PC-01 Lviv
http://pc01.lviv.ua/forum/

DprToLvt (PasToLvt)
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=153
Page 13 of 15

Author:  Zelya [ 03 Dec 2012, 14:19 ]
Post subject:  Re: DprToLvt (PasToLvt)

QDialogs - оно самое. Ищите замену, вроде обычный Dialogs или что-то такое.

Author:  MARAT_BEST [ 03 Dec 2012, 14:23 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Quote:
у вас гдето (возможно при компиляции библиотеки, в uses попала ссылка на данный DLL)
Code:
    uses
  Classes, Forms, Windows, SysUtils, Graphics, IdGlobal,  QDialogs,
  UnitMain in 'UnitMain.pas',
  EkranLVUnit in 'EkranLVUnit.pas' {MainFormEmu},
  RegViewLVUnit in 'RegViewLVUnit.pas' {RegViewForm},
  I8080 in 'I8080.pas',
  I8080proc in 'I8080proc.pas',
  ExecuteLV in 'ExecuteLV.pas',
  Delays in 'Delays.pas',
  SAStypes in '..\..\Poject\UNITdelphi\SAStypes.PAS',
  SASFiles in '..\..\Poject\UNITdelphi\SASFiles.pas',
  SASstring in '..\..\Poject\UNITdelphi\SASstring.PAS',
  Memory_ in 'Memory_.pas',
  FormatLVT in 'FormatLVT.pas',
  FormatE3 in 'FormatE3.pas',
  FormatEMU in 'FormatEMU.pas',
  SASChar in '..\..\Poject\UNITdelphi\SASChar.PAS',
  FormatSAV in 'FormatSAV.pas';
В УПОР НЕВИЖУ ! :-)
Я так подозреваю может из-за примениея типа данных INT64.
на вскидку QDialogs ? и плюс гдето может быть в следующих модулях также в uses

EkranLVUnit.pas
RegViewLVUnit.pas
.....

Author:  sas9568635 [ 03 Dec 2012, 14:39 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
на вскидку QDialogs ? и плюс гдето может быть в следующих модулях также в uses....
Позже попробую убрать QDialogs, но раз я его когда-то (уже не помню зачем) вставил - значит он нужен !

Author:  sas9568635 [ 19 Dec 2012, 17:21 ]
Post subject:  Re: DprToLvt (PasToLvt)

Уважаемые форумчане!
Уже не знаю как и вопрос задать... :-) а также незнаю что искать:-)
вообщем...
Каким образом можно быстро и грамотно «распознавать» текст (код) языка паскаля (дельфи)?... т.е. я было начал писать подобное...
если «program» тогда ...
если «uses» тогда ...
если «Var» тогда... пробелы, табы, вводы - пропустить... «вычислить» переменную.... пробелы, табы, вводы, пропустить... ожидать... либо запятую... либо двоеточие... о господи:-), если еще одна переменная опять повторить - пробелы, табы, вводы пропустить... а предыдущие переменные «помнить» так как их тип будет указан после двоеточия... а также после указания типа возможно еще «=значение» и т. д.
Вообщем, у меня началось головокружение... :-)
Вот и подумал, может существует какой-то более простой способ «распознавания» этого всего страхомудия!?.. иль кто подскажет что мне необходимо искать в инете для реализации этого?!... а может вообще готовый модуль существует подточенный под распознавание паскаля?!...

Author:  Zelya [ 19 Dec 2012, 18:50 ]
Post subject:  Re: DprToLvt (PasToLvt)

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

Author:  sas9568635 [ 19 Dec 2012, 19:28 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Скажу однозначно - простого способа нет.
Спасибо за ответ ! Но Ваш ответ меня разочаровал! :D :( :wink: догадывался что так оно и будет...:(

Author:  Zelya [ 20 Dec 2012, 11:56 ]
Post subject:  Re: DprToLvt (PasToLvt)

Ну, если честно, я тут сам слабоват, что-то конкретное советовать. Мой прототип Си компилятора так никогда толоком и не работал. Может, уважаемый vinxru поможет больше. Но моего опыта достаточно, чтобы сказать, что задача весьма сложная, а для Паскаля будет сложнее, чем для Си.

Author:  sas9568635 [ 20 Dec 2012, 12:37 ]
Post subject:  Re: DprToLvt (PasToLvt)

Я понимаю, что задача не из простых, но я думал (думаю), что возможно существуют правила правильного подхода к ней... допустим...
Сразу из текста удалить все коментарии и лишние пробелы...
обрабатывать построчно (или по "точку с запятой")
"маркировать" и "нумеровать" все метки "Begin" "end" "If" и т.д. так чтобы можно было сразу понять на какую метку должен быть переход допустим таким образом Метка "Proc_Primer_IF1_else" и т.д.

Вообще, я начинаю поминать, что внутри одного компилятора должны существовать не менее 2-3 подкомпилятров которые должны компилировать код в код следующего компилятора, постепенно преобразовывая код Паскаля в => Полупаскаль-ПолуМакроАсм => МакроАсм => Асм => коды КР580...

Вот так вот оно в моем понимании, во всяком случаее на данный момент.

На других форумам мне посоветовали вот -
Quote:
ищите книги по теории построения лексических и синтаксических анализаторов. основам конструирования компиляторов и т.д.)
начните, например http://it.mmcs.sfedu.ru/wiki/Конспект_л ... мпиляторов»
...........................
да, есть интерпретаторы кода на Паскаль/Delphi.
Вопрос только в том, что Вы хотите сделать? (что получить на выходе)...

Author:  Zelya [ 20 Dec 2012, 12:55 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Вопрос только в том, что Вы хотите сделать? (что получить на выходе)...
Оень логичный вопрос. Так как я почти уверен, что для Делфи существует механизм, создания объектов в памяти из кода-стринга. Только вот, Вам он не нужен. Можно попробовать поискать парсер, который из стринга сделает дерево сущностей. Типа из
Code:
x:=y+1;
Вы получите XML:
Code:
<BinaryOperation>
	<Type>
		Assign
	</Type>
	<Left>
		<Variable>
			<Type>
				Integer
			</Type>
			<Name>
				x
			</Name>
		</Variable>
	</Left>
	<Right>
		<BinaryOperation>
			<Type>
				Add
			</Type>
			<Left>
...
С таким XML уже намного проще работать. Но только вот такой парсер очень сложная штука. Не знаю найдете ли.

Насчет же собственной компиляции, все-таки советую попробовать начать с ассемблера в бинарник. Как тренировка - просто прекрасно, и тут я многое могу подсказать. Я понимаю, что Вас расстраивает отсутствие подсветки и проверки синтаксиса и прочие "плюшки" редактора Делфи. Но поверьте, во-первых, это более простая задача. А во-вторых это можно будет потом самому доделать. А использовать среду Делфи для компиляции ПК-01 - слишком сложная и вряд ли нужная задача. Пешите полностью свой компилятор :)

Author:  sas9568635 [ 20 Dec 2012, 13:50 ]
Post subject:  Re: DprToLvt (PasToLvt)

Среда Дельфи это уже как хороший вспомагательный инструмент по проверки Лексического анализа и
Синтаксического анализа (ну и работоспособности программы для ПК-01). В моей задумке, компилятор будет компилировать правильно только после того как был проверен компиляцией дельфи. Перестраховка такая чтоль:-) Моя задача(задумка) написать компилятор (клон Дельфи), полностью совместимый с Дельфи средой. Т.е. когда написанную программу и полностью подготовленную (готовую) и проверенную на работоспособность в Дельфи, можно "легким движением" в маш коды ПК-01. Понятно, что многое будет упрощено "на нет". Когда я напишу компилятор простейший, но достаточно эффективный, тогда при попытке написать прогу будет очевидно, что имменно нужно развивать и дорабатывать. Допустим, компилятор будет понимать простейшие конструкции "A:=A+B;" "A=A*C;" А конструкции посложнее такие как "A:=A*B+C" т.е. больше чем одно математическое действие он понимать не будет. При попытке написать программу для ПК-01 сразу станет очивидным: А нужно ли это!? А можно ли "с этим жить"!? А стоит ли имменно это дорабатывать!? Или переключится на что-то другое? Например лучше доработать тип-массивы которых пока еще нет и т.д. или строку стринг или еще чего нить...
Quote:
Пешите полностью свой компилятор :)
Понимаешь, если я буду писать СВОЙ компилятор, то получиться, что я сам себе постепенно "отрубаю" пространство для дальнейшего развития компилятора. То есть, может получится в оконцовке, что я не учёл например, применение символов "^@" и т.д. либо наотрез решил, что конструкции с веткой else не нужны и не будут применяться в дальнейшем. А они "вкрай" понадобились. Представь, как после этого возможно вообще будет дорабатывать компилятор, если он изначально базировался на том что конструкций(символов) каких-то не будет?! Тоже самое и с лишними пробелами табами вводами... Вот допустим я решил, что их (лишних) не будет!... прога должна быть написана чётко и правильно и только тогда её сможет скомпилировать МОЙ компилятор?... Представляешь какая может получится скованность!? Поэтому я максимально страюсь приближаться к "Дельфийской свободе" написания программ те. чтобы компилятор понимал одинаково "A:=A+1;" и "A : =A + 1 ;" и т.д.
Вообщем все для удобства и размаха пользователя! :-) ну и я сам такой же... Хочу с размахом! Без ограничений! Непонятных!

Author:  Zelya [ 20 Dec 2012, 13:59 ]
Post subject:  Re: DprToLvt (PasToLvt)

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

Так же, в дополнение, хочу отметить, что из 99% потенциальных пользователей (а их и так очень мало) компилятора для ПК-01, лучше откажуться от разработки программ вобще, чем будут ставить себе Делфи. Так что либо пишите полностью независимую среду, либо ориентируйтесь на маленькие дпоплнительные утилиты или библиотеки, не требующие установки.

Author:  Zelya [ 20 Dec 2012, 14:22 ]
Post subject:  Re: DprToLvt (PasToLvt)

Обсуждение Паскаля вынес в отдельную тему.

Author:  sas9568635 [ 20 Dec 2012, 15:47 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Так же, в дополнение, хочу отметить, что из 99% потенциальных пользователей (а их и так очень мало) компилятора для ПК-01, лучше откажуться от разработки программ вобще, чем будут ставить себе Делфи. Так что либо пишите полностью независимую среду, либо ориентируйтесь на маленькие дпоплнительные утилиты или библиотеки, не требующие установки.
Хм...
Что-то мы на разных языках... :-)
Существует модуль-DprPasToLV.dll при котором будет процедура (функция) Compile(s:string);
Которая будет компилировать текстовый файл (в строке S) и создавать готовый SAV-файл для ПК-01.
Утилиту Compile.exe, иммея готовый компилятор в виде Compile(s:string); , создать создать несложно. Поэтому Дельфи можно при желании вообще не использовать (а блокнот, например :-) ). До сообственной среды подобной Дельфи, еще очень далеко и будет ли она нужна вообще, имея средЫ Дельфи, Паскаль и т.д.. Просто среда Дельфи как хороший вспомагатель для написания и отработки и "доведения до ума" программы которую пишешь для ПК-01, и получается, что зачем изобретать велосипед т.е. Сообственную среду подобную дельфи, но видишли подточенную под мой компилятор!?.

Надеюсь мой текст, который выше можно понять. :-)

Author:  sas9568635 [ 20 Dec 2012, 16:58 ]
Post subject:  Re: DprToLvt (PasToLvt)

Вот впервые столнулся вот с таким:
Компиляторы компиляторов
Lex + Yacc
Flex + Bison
CoCo
Antlr
Gold Parser Builder
GPLex + GPPG


Скажите пожалуйста что это такое, стоит ли с этим разбиратся, найду ли на русском доки по этому, и вообще стоит ли?... :-)

Author:  Zelya [ 20 Dec 2012, 21:26 ]
Post subject:  Re: DprToLvt (PasToLvt)

sas9568635
Насчет использования/не использования Делфи ответил в теме по Паскалю.

Насчет "компиляторы компиляторов" - не слышал, не использовал. Хотя, звучит очень интересно. Может, на досуге почитаю. Правда, есть подозрение, что в Вашем случае это все может только усложнить разработку (Вам придется учить дополнительный скриптовый язык, или еще что-то такое).

Page 13 of 15 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/