Start of TRIGOL Compiler for a Program P13.tri at Sun Apr 01 13:14:58 2001


Scanner started

Input program:

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

Scanned program:

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

Identifiers:F;

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

Scanner ended

Parser started


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

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

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


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



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


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

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


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



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



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

Parsing tree

*
12


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

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


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



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



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

Parsing tree

*
*
12
3



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


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


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



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



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



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


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

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

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


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



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


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

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


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



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



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

Parsing tree

*
13



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


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


Stack & Word # <•IF <•aritmav =•= <•( =•tegur5THEN #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

=
*
*
12
3
*
13


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
=
*
*
12
3
*
13


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
=
*
*
12
3
*
13
:=
F*
7+
3*
25
:=
F100
Table of constants
c1=1c2=2c3=3c4=7c5=5c6=100
Table of identifiers
i1=F

Modified tree:

IF
=
*
*
12
3
*
13
:=
F*
7+
3*
25
:=
F100
; gen_header: source text
; # IF (1*2*3)=(1*3) THEN F:=7*(3+(2*5)); F:=100 #
;
; gen_header: header
; Program P13.tri.asm
.MODEL small
.STACK 100h
; gen_header: # of workvariables=2
dTv0 DW 0
dTv1 DW 0
; gen_header: code segment'll start
.CODE
ProgramStart:
mov ax,@data
mov ds,ax
;compiling the operator (1*2)
mov ax,1
mov dx,2
mul dx
mov dTv0,ax
;compiling the operator ((1*2)*3)
mov ax,dTv0
mov dx,3
mul dx
mov dTv0,ax
;compiling the operator (1*3)
mov ax,1
mov dx,3
mul dx
mov dTv1,ax
;compiling the operator (((1*2)*3)=(1*3))
mov ax,dTv0
cmp ax,dTv1
je MExi1
jmp MExi2
;compiling the operator IF (((1*2)*3)=(1*3)) 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 P13.tri.asm is compiled

Compiler ended at Sun Apr 01 13:14:58 2001