Ignore:
Timestamp:
Aug 5, 2010, 9:51:16 AM (14 years ago)
Author:
george
Message:

Fixed expression parsing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DelphiToC/Analyze/UPascalParser.pas

    r38 r39  
    77uses
    88  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, UPascalSource, FileUtil;
     9  Dialogs, UPascalSource, FileUtil;
    1010
    1111type
     
    254254  with Parser do begin
    255255    Expect('while');
     256    Condition.CommonBlock := CommonBlock;
    256257    TParserExpression(Condition).Parse(Parser);
    257258    Expect('do');
     
    282283        if Identifier = '(' then begin
    283284          // Subexpression
    284           with TExpression(Expressions[Expressions.Count - 1]) do begin
     285          with TExpression(Expressions.Last) do begin
    285286            SubItems[1] := TExpression.Create;
    286287            TParserExpression(SubItems[1]).Parse(Parser);
    287288          end;
    288289          with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     290            CommonBlock := Self.CommonBlock;
    289291            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    290292          end;
     
    293295        if IsOperator(Identifier) then begin
    294296          // Operator
    295           TExpression(Expressions[Expressions.Count - 1]).OperatorName := Identifier;
    296           TExpression(Expressions[Expressions.Count - 1]).NodeType := ntOperator;
     297          TExpression(Expressions.Last).OperatorName := Identifier;
     298          TExpression(Expressions.Last).NodeType := ntOperator;
    297299        end else
    298300        if IsIdentificator(Identifier) then begin
     
    301303          if Assigned(NewVariable) then begin
    302304            // Referenced variable
    303             with TExpression(Expressions[Expressions.Count - 1]) do begin
     305            with TExpression(Expressions.Last) do begin
    304306              SubItems[1] := TExpression.Create;
    305307              TExpression(SubItems[1]).NodeType := ntVariable;
     
    307309            end;
    308310            with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     311              CommonBlock := Self.CommonBlock;
    309312              SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    310313            end;
     
    313316            if Assigned(Method) then begin
    314317              // Referenced method
    315               with TExpression(Expressions[Expressions.Count - 1]) do begin
     318              with TExpression(Expressions.Last) do begin
    316319                SubItems[1] := TExpression.Create;
    317320                if NextCode  = '(' then               // Method with parameters
     
    331334                  Expect(')');
    332335                end;
    333                 TExpression(SubItems[1]).NodeType := nTFunction;
     336                TExpression(SubItems[1]).NodeType := ntFunction;
    334337                TExpression(SubItems[1]).Method := Method;
    335338              end;
    336339              with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     340                CommonBlock := Self.CommonBlock;
    337341                SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    338342              end;
     
    341345              if Assigned(Constant) then begin
    342346                // Referenced constant
    343                 with TExpression(Expressions[Expressions.Count - 1]) do begin
     347                with TExpression(Expressions.Last) do begin
    344348                  SubItems[1] := TExpression.Create;
    345349                  TExpression(SubItems[1]).NodeType := ntConstant;
     
    347351                end;
    348352                with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     353                  CommonBlock := Self.CommonBlock;
    349354                  SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    350355                end;
     
    357362        begin
    358363          // Constant value
    359           with TExpression(Expressions[Expressions.Count - 1]) do begin
     364          with TExpression(Expressions.Last) do begin
    360365            SubItems[1] := TExpression.Create;
     366            TExpression(SubItems[1]).CommonBlock := Self.CommonBlock;
    361367            TExpression(SubItems[1]).NodeType := ntConstant;
    362368
     
    367373              //  TExpression(SubItems[1]).Value[I - 1] := Byte(Identifier[I]);
    368374            end else begin
    369               //SetLength(TExpression(SubItems[1]).Value, 1);
    370               //TExpression(SubItems[1]).Value[0] := StrToInt(Identifier);
     375              TExpression(SubItems[1]).Value := Identifier;
    371376            end;
    372377          end;
     378          //ShowMessage(IntToStr(Expressions.Count));
    373379          with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     380            CommonBlock := Self.CommonBlock;
    374381            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    375382          end;
     
    386393            TExpression(Expressions[I - 1]).SubItems[1] := Expressions[I];
    387394            TExpression(Expressions[I + 1]).SubItems[0] := Expressions[I];
    388             Expressions.Delete(I);
     395            //Expressions.Delete(I);
    389396          end else Inc(I);
    390397      end;
    391398    end;
    392399  end;
    393   Result := TExpression(TExpression(Expressions[0]).SubItems[1]);
    394   TExpression(Expressions[0]).SubItems[1] := nil;
     400  Assign(TExpression(TExpression(Expressions.First).SubItems[1]));
     401  TExpression(Expressions.First).SubItems[1] := nil;
     402  //ShowMessage(IntToStr(Expressions.Count));
    395403  TExpression(Expressions[1]).SubItems[0] := nil;
    396404  Expressions.Destroy;
Note: See TracChangeset for help on using the changeset viewer.