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 | == | <tegur | 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 | # |
Stack & Word | # | <IF | <aritmav | == | <aritmav | THEN | #i# | F | := | #c# | 7 | * | ( | #c# | 3 | + | ( | #c# | 2 | * | #c# | 5 | ) | ) | ; | #i# | F | := | #c# | 100 | # |
Stack & Word | # | <IF | <aritmav | == | =loogilav11 | THEN | #i# | F | := | #c# | 7 | * | ( | #c# | 3 | + | ( | #c# | 2 | * | #c# | 5 | ) | ) | ; | #i# | F | := | #c# | 100 | # |
Stack & Word | # | <IF | =loogilav | THEN | #i# | F | := | #c# | 7 | * | ( | #c# | 3 | + | ( | #c# | 2 | * | #c# | 5 | ) | ) | ; | #i# | F | := | #c# | 100 | # |
Parsing tree
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
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
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
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
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
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
Stack & Word | # | <operaatorid13 | =; | <operaator | # |
Stack & Word | # | <operaatorid13 | =; | =operaatorid | # |
Stack & Word | # | =operaatorid | # |
the parsing is completed
Parsing tree
Table of constants
c1=1 | c2=7 | c3=3 | c4=2 | c5=5 | c6=100 |
Table of identifiers
Modified tree:
; 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