|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Написать простой язык программирования
драсте
мне захотелось написать что то типа упращеного аналога батника вот сделал Код:
function Cod(var s : string) : string; var i : integer; begin i := Pos(' ',s); if i = 0 then begin Cod := s; s := '' end else begin Cod := Copy(s, 1, i - 1); Delete(s,1,i); end end; procedure Comand(s : string); var c : string; i : integer; begin c := Cod(s); i := AnsiIndexStr(c,kom); // порядок команд в списке case i of // выбор команды 0: WinExec(pchar(s),SW_Show); // запускающая програма 1: Kozna.Vivod.Caption := s; 2: dely(s); {3: } end; end; procedure TKozna.FormCreate(Sender: TObject); var s : string; i : integer; begin For i := 0 to Zadan.Lines.Count - 1 do begin s := Zadan.Lines[i]; //берем очередную строку Comand(s); end; end; без переменых трудно хотелось узнать как создавать переменые |
#2
|
|||
|
|||
Заводишь Dictionary, а лучше всего Map.
При нахождении присвоения переменной заносишь ее имя и значение в этот map. При нахождении использования переменной - вставляешь значение из map'а. |
#3
|
|||
|
|||
чет не приходит мне что такое Dictionary или Map
переводчик че то не родил у меня мысли а в голове крутиться примерно такое Код:
type TUltr = record mn : string; имя переменой znach : string; значение переменной end; var per : array of TUltr; список переменных ai : integer; количество переменых at : integer; зарезервировано под переменые begin SetLength(per, at); а переменная должны начинаться со специального символа ну например "#" Последний раз редактировалось SKIPtr, 03.01.2020 в 03:44. |
#4
|
|||
|
|||
ну сделай как в bash.
присвоение определяется наличием символа '=', а использование наличием префикса '$'. Код:
myvar=aaa echo $myvar |
#5
|
|||
|
|||
не-е
проще делать при обязательном наличии оператора например Код:
Set myvar=aaa а там первое слово оператор а уже оператор Set разбереться с командой myvar=aaa |
#6
|
|||
|
|||
А вообще, есть такой чувак, Антелер, у него есть генератор АСТ дерева для создания языков программирования. Кстати, для Delphi/Pascal у него генератор тоже есть.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
SKIPtr (04.01.2020)
|
#7
|
|||
|
|||
Цитата:
а то тут какие то слова не русские и не понятные |
#8
|
|||
|
|||
Ну, простая реализация примерно такая (с учетои работы в Delphi 7):
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TVariables = class private FItems : TStringList; FCaseSensitive : Boolean; function GetItem(VarName: String): String; procedure SetItem(VarName: String; const Value: String); public constructor Create; destructor Destroy; override; property Items[VarName : String] : String read GetItem write SetItem; end; TForm1 = class(TForm) edVarList: TMemo; btSet: TButton; edVarName: TEdit; edVarValue: TEdit; btGet: TButton; procedure btSetClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btGetClick(Sender: TObject); private { Private declarations } V : TVariables; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TVariables } constructor TVariables.Create; begin inherited Create; FItems := TStringList.Create; end; destructor TVariables.Destroy; begin FItems.Free; inherited; end; function TVariables.GetItem(VarName: String): String; begin Result := FItems.Values[VarName]; end; procedure TVariables.SetItem(VarName: String; const Value: String); begin FITems.Values[VarName] := Value; end; procedure TForm1.btSetClick(Sender: TObject); begin V.Items[edVarName.Text] := edVarValue.Text; edVarList.Lines.Text := V.FItems.Text; end; procedure TForm1.FormCreate(Sender: TObject); begin V := TVariables.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin V.Free; end; procedure TForm1.btGetClick(Sender: TObject); begin edVarValue.Text := V.Items[edVarName.Text]; edVarList.Lines.Text := V.FItems.Text; end; end. |