Гут... Мысль понял... Токма у меня опять в штопор входит...
Надо так, ваще вечером загружу TurboDelphi 2006, оно бесплатное и там помойму с памятью корректнее работает, паетому на ней программы можно и продовать и раздавать... Да и синхронность будет!
А машину чоб не мучица из MidpX dll выдрать можно, гы... Ток интерфейс свой прикрутить, я тож гляну чо там за фукции торчат.
Теперь пример уже синтаксического анализатора, который разбирает строки вида
N +/- ... Где N - цифра, тоесть типа
1+2-3+1-6 или 3+3+5+6-4 ну и т.д... Начнем с азов...

{$APPTYPE CONSOLE}
const TAB = ^I;
var Look: char;
procedure GetChar; begin Read(Look); end;
procedure Error(s: string); begin WriteLn; WriteLn(^G, 'Error: ', s, '.'); end;
procedure Abort(s: string); begin Error(s); Halt; end;
procedure Expected(s: string); begin Abort(s + ' Expected'); end;
procedure Match(x: char); begin if Look = x then GetChar else Expected('''' + x + ''''); end;
function IsAlpha(c: char): boolean; begin IsAlpha := upcase(c) in ['A'..'Z']; end;
function IsDigit(c: char): boolean; begin IsDigit := c in ['0'..'9']; end;
function GetName: char;
begin
if not IsAlpha(Look) then Expected('Name');
GetName := UpCase(Look);
GetChar;
end;
function GetNum: char;
begin
if not IsDigit(Look) then Expected('Integer');
GetNum := Look;
GetChar;
end;
procedure Emit(s: string); begin Write(TAB, s); end;
procedure EmitLn(s: string); begin Emit(s); WriteLn; end;
//--------------------------S analizator-----------------------------
procedure Term;
begin
EmitLn('bipush ' + GetNum);
end;
procedure Add;
begin
Match('+');
Term;
EmitLn('iadd');
end;
procedure Sub;
begin
Match('-');
Term;
EmitLn('isub');
EmitLn('ineg');
end;
procedure Expression;
begin
Term;
while Look in ['+', '-'] do begin
case Look of
'+': Add;
'-': Sub;
else Expected('Addop');
end;
end;
end;
//------------------------------------------------------------------
procedure Init;
begin
GetChar;
end;
begin
Init;
Expression;
end.
вобчем сам анализатор пока из 4 фукций
procedure Term;
procedure Add;
procedure Sub;
procedure Expression;
И выдает асм листинг формата JVM
вот пример разбора строки 1+2-3+4-5+6
bipush 1
bipush 2
iadd
bipush 3
isub
ineg
bipush 4
iadd
bipush 5
isub
ineg
bipush 6
iadd
В принципе немного отличаецо от Java классики, но ето от того что там используетца польская запись, кстати хто заинтересуеца АЛГОРИТМ ДЕКСТРА для перевода текстовой строки в обратную польскую запись.