Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktionsparameter vorwärts abarbeiten (https://www.delphipraxis.net/77756-funktionsparameter-vorwaerts-abarbeiten.html)

gbl 24. Sep 2006 14:20


Funktionsparameter vorwärts abarbeiten
 
Hallo,

ich habe hier ein hoffentlich nicht unlösbares Problem. Im Hauptprogrammblock habe ich Funktionen die Funktionen aufrufen. Ich hbe entdeckt, daß eigendlich alle Parameter von rechts nach links abgearbeitet werden. Die Ausgabe verdeutlicht dies.

PS: Das Programm ist zwar mit Lazarus geschrieben worden, wirkt sich jedoch nur auf den USES Teil aus.

Delphi-Quellcode:
program project1;
{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { add your units here };



type THTMLTag = record
        level: longint;
           end;

var HTMLTag: THTMLTag;



procedure inc_taglevel;
begin
  inc(HTMLTag.level);
  //writeln('Taglevel: ', HTMLTag.level);
end;

procedure dec_taglevel;
begin
  dec(HTMLTag.level);
  //writeln('Taglevel: ', HTMLTag.level);
end;




procedure test_parameter(args: array of const);
var I : longint;

begin
  exit;
end;


procedure HTML_Init;
begin
  HTMLTag.level:=0;
end;


procedure HTML_Start(tag: array of const);
begin
  test_parameter(tag);
  writeln('HTML_Start');
  inc_taglevel;
end;


function HTML_Table_Start(tag: array of const): integer;
begin
  test_parameter(tag);
  writeln('HTML_Table_Start');
  inc_taglevel;
end;


function HTML_Table_Ende:integer;
begin
  dec_taglevel;
  writeln('HTML_Table_Ende');
end;


function HTML_Table_Row_Start(tag: array of const): integer;
begin
  test_parameter(tag);
  writeln('HTML_Table_Row_Start');
  inc_taglevel;
end;


function HTML_Table_Row_Ende:integer;
begin
  dec_taglevel;
  writeln('HTML_Table_Row_Ende');
end;


begin
  writeln;
  writeln('Beginn des Tests');
  writeln;

  HTML_Start([
    HTML_Table_Start([
      HTML_Table_Row_Start([
      ]),
      HTML_Table_Row_Ende
    ]),
    HTML_Table_Ende
  ]);


  writeln;
  writeln('Ende des Tests');
end.

Code:
Beginn des Tests

HTML_Table_Row_Start
HTML_Table_Row_Ende
HTML_Table_Start
HTML_Table_Ende
HTML_Start

Ende des Tests

Ich möchte aber folgende Ausgabe erreichen;

Code:
Beginn des Tests

HTML_Start
HTML_Table_Start
HTML_Table_Row_Start
HTML_Table_Row_Ende
HTML_Table_Ende


Ende des Tests
Eben einfach so wie es im Programm steht.

marabu 24. Sep 2006 14:34

Re: Funktionsparameter vorwärts abarbeiten
 
Nein Günter,

nicht von rechts nach links, sondern von innen nach außen werden die verschachtelten Funktionen evaluiert. Dein Konzept muss das entsprechend berücksichtigen.

Grüße vom marabu

gbl 24. Sep 2006 15:55

Re: Funktionsparameter vorwärts abarbeiten
 
Danke,

du hast es richtig erkannt. Jedoch fällt mir eine Lösung dazu ein.

marabu 24. Sep 2006 16:03

Re: Funktionsparameter vorwärts abarbeiten
 
Zitat:

Zitat von gbl
Jedoch fällt mir eine Lösung dazu ein.

Falls du ein "k" vor "eine" vergessen haben solltest ...

Die Verschachtelung macht eigentlich nur Sinn, wenn der Rückgabewert der einzelnen Funktionen der jeweils auszugebende String ist.

marabu

gbl 24. Sep 2006 16:12

Re: Funktionsparameter vorwärts abarbeiten
 
"k" vergessen.


Das Programm basiert auf der Idee, CGI Anwendungen elegant programmieren zu können. Desweiteren soll der erzeugte HTML Code auch elegant aussehen; die Einrückungen,... .

Ich bin auf der Suche nach einer "einfachen" Möglichkeit Prozeduren/Funktionen zu schachteln, die auch ein der Quelltextreichenfolge abgearbeitet werden.

Die Idee stammt von PEARL. Nur die Syntax dort ist für mich ein Brechmittel, außerdem gibts da keinen Compiler.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz