Start of TRIGOL Compiler for a Program p4.tri at Sun Mar 25 13:00:47 2001


Scanner started

Input program:

# IF #c# 1 = #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Scanned program:

1 20 11 52 19 11 52 21 4 53 5 11 54 9 12 11 55 7 12 11 56 9 11 57 13 13 2 4 53 5 11 58 1

Identifiers:F;

Constants:1, 7, 3, 2, 5, 100;

Scanner ended

Parser started


Stack & Word # <•IF#c# 1 = #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•IF <•#c#= #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•IF <•tegur= #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF <•yksliige= #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF <•aritmav= #c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•IF <•aritmav =•=#c# 1 THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•IF <•aritmav =•= <•#c#THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•IF <•aritmav =•= <•tegurTHEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF <•aritmav =•= <•yksliigeTHEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF <•aritmav =•= <•aritmavTHEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF <•aritmav =•= =•loogilav11THEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•IF =•loogilavTHEN #i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Parsing tree

=
11


Stack & Word # <•IF =•loogilav =•THEN#i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus#i# F := #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Parsing tree

IF
=
11


Stack & Word # <•tingimus <•#i#:= #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja:= #c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:=#c# 7 * ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•#c#* ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•tegur* ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige* ( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•*( #c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•(#c# 3 + ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•#c#+ ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•tegur+ ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•yksliige+ ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav+ ( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+( #c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•(#c# 2 * #c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•#c#* #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•tegur* #c# 5 ) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige* #c# 5 ) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige =•*#c# 5 ) ) ; #i# F := #c# 100 #

Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige =•* <•#c#) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige =•* <•tegur) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige =•* =•yksliige4) ) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•yksliige) ) ; #i# F := #c# 100 #

Parsing tree

*
25



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•aritmav) ) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( <•aritmav =•)) ; #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•( =•tegur5) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•tegur) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ <•yksliige) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•+ =•aritmav2) ; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav) ; #i# F := #c# 100 #

Parsing tree

+
3*
25


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( <•aritmav =•); #i# F := #c# 100 #


Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•( =•tegur5; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* <•tegur; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige =•* =•yksliige4; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= <•yksliige; #i# F := #c# 100 #

Parsing tree

*
7+
3*
25



Stack & Word # <•tingimus <•muutuja =•:= <•aritmav; #i# F := #c# 100 #



Stack & Word # <•tingimus <•muutuja =•:= =•omistamine1; #i# F := #c# 100 #



Stack & Word # <•tingimus <•omistamine; #i# F := #c# 100 #

Parsing tree

:=
F*
7+
3*
25



Stack & Word # <•tingimus =•operaator; #i# F := #c# 100 #



Stack & Word # <•iflause; #i# F := #c# 100 #



Stack & Word # <•operaator; #i# F := #c# 100 #



Stack & Word # <•operaatorid13; #i# F := #c# 100 #


Stack & Word # <•operaatorid13 =•;#i# F := #c# 100 #

Stack & Word # <•operaatorid13 =•; <•#i#:= #c# 100 #


Stack & Word # <•operaatorid13 =•; <•muutuja:= #c# 100 #


Stack & Word # <•operaatorid13 =•; <•muutuja =•:=#c# 100 #

Stack & Word # <•operaatorid13 =•; <•muutuja =•:= <•#c##


Stack & Word # <•operaatorid13 =•; <•muutuja =•:= <•tegur#



Stack & Word # <•operaatorid13 =•; <•muutuja =•:= <•yksliige#



Stack & Word # <•operaatorid13 =•; <•muutuja =•:= <•aritmav#



Stack & Word # <•operaatorid13 =•; <•muutuja =•:= =•omistamine1#



Stack & Word # <•operaatorid13 =•; <•omistamine#

Parsing tree

:=
F100



Stack & Word # <•operaatorid13 =•; <•operaator#



Stack & Word # <•operaatorid13 =•; =•operaatorid#



Stack & Word # =•operaatorid#



Stack & Word programm12#

the parsing is completed

Parsing tree

IF
=
11
:=
F*
7+
3*
25
:=
F100
Table of constants
c1=1c2=7c3=3c4=2c5=5c6=100
Table of identifiers
i1=F

Modified tree:

IF
=
11
:=
F*
7+
3*
25
:=
F100
; gen_header: source text
; # IF 1 = 1 THEN F := 7 * ( 3 + ( 2 * 5 ) ) ; F := 100 #
;
; gen_header: header
; Program p4.tri.asm
.MODEL small
.STACK 100h
; gen_header: # of identifiers=1
.DATA
F DW 0
; gen_header: # of workvariables=1
dTv0 DW 0
; gen_header: code segment'll start
.CODE
ProgramStart:
mov ax,@data
mov ds,ax
;compiling the operator (1=1)
mov ax,1
cmp ax,1
je MExi1
jmp MExi2
;compiling the operator IF (1=1) THEN
;compiling the operator (2*5)
MExi1: mov ax,2
mov dx,5
mul dx
mov dTv0,ax
;compiling the operator (3+(2*5))
mov ax,3
add ax,dTv0
mov dTv0,ax
;compiling the operator (7*(3+(2*5)))
mov ax,7
mov dx,dTv0
mul dx
mov dTv0,ax
;compiling the operator F:=(7*(3+(2*5)))
mov ax,dTv0
mov F,ax
;compiling the operator F:=100
MExi2: mov ax,100
mov F,ax
mov ah,4ch
int 21h
END ProgramStart
programm p4.tri.asm is compiled

Compiler ended at Sun Mar 25 13:00:47 2001