Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
RealDreamy
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 29
#1

Алогичность - перевод инфиксного выражения в постфиксный

20.01.2011, 23:19. Просмотров 559. Ответов 0
Метки нет (Все метки)

Мне над организовать перевод инфиксного выражения в постфиксный. Сделал в ассемблере по алгоритму, описанному здесь: http://decoding.narod.ru/practic/polishrecord/polishrecord.html

Вот код, он рабочий.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
masm
model small
 
.stack 256
 
.data
    msgEnter db 13,10,'$'
 
    str1 db 100 dup(?)
    str2 db 100 dup(?)
 
.code
 
    testing macro
        push ax
        push dx
 
        pop dx
        pop ax
    endm
 
    ent macro
        push ax
        push dx
 
        mov ah, 09h
        mov dx, offset msgEnter
        int 21h
 
        pop dx
        pop ax
    endm
 
    inputString macro str
        local is_Begin, is_OnEnter
 
        xor si,si
 
        is_Begin:
            mov ah, 01h
            int 21h
 
            cmp al, 13
            je is_OnEnter
 
            cmp al, '$'
            je is_OnEnter
 
            mov str[si], al
            inc si
            jmp is_Begin
 
        is_OnEnter:
            mov str[si], '$'
            ent
    endm
 
    translate proc
            xor si,si
            xor bx, bx
 
        t_Begin:
            cmp str1[si], '$'            
            je t_Check
 
            cmp str1[si], '*'
            je pr1
 
            cmp str1[si], '/'
            je pr1
 
            cmp str1[si], '-'
            je pr2
 
            cmp str1[si], '+'
            je pr2
 
            cmp str1[si], '('
            je pr3
 
            cmp str1[si], ')'
            je pr4
 
            mov al, str1[si]
            mov str2[bx], al
            inc si
            inc bx
            jmp t_Begin
 
        t_Check:
 
            cmp cx, 0
            je t_Exit
 
            pop ax
            mov str2[bx], al
 
            inc bx
            dec cx
 
            jmp t_Check
 
        pr4:
            inc si
        pr_4:
            cmp cx, 0
            je t_Check
 
            pop ax
            dec cx
 
            cmp al, '('
            je t_Begin
 
            mov str2[bx], al
            inc bx
            jmp pr_4
 
        pr3:
            mov al, str1[si]
            push ax
            inc cx
            inc si
            jmp t_Begin
            
        pr1:
            cmp cx,0
            je pr_1
 
            pop ax
            dec cx
            
            cmp al, '+'
            je pr_1
 
            cmp al, '-'
            je pr_1
 
            cmp al, '('
            je pr__1
 
            cmp al, ')'
            je pr__1
 
            mov str2[bx], al
            inc bx
            jmp pr1
 
        pr__1:
            push ax
            inc cx
 
        pr_1:
            mov al, str1[si] 
            push ax
            inc si
            inc cx
            jmp t_Begin
 
        pr2:
            cmp cx,0
            je pr_2
 
            pop ax
            dec cx        
 
            cmp al, '('
            je pr__2
 
            cmp al, ')'
            je pr__2
 
            mov str2[bx], al
            inc bx
            jmp pr2
 
        pr__2:
            push ax
            inc cx
 
        pr_2:
            mov al, str1[si]
            push ax
            inc si
            inc cx
            jmp t_Begin
        
        t_Exit:
 
            mov str2[si], '$'
            ret
    endp
 
    main:
        mov ax, @data
        mov ds, ax
 
        inputString str1
        call translate
 
        mov ah, 09h
        mov dx, offset str2
        int 21h
 
        ent
        mov ax,4c00h
        int 21h
        end main

Ну как рабочий. В отладчике TD у меня прога работает. А если запускать ток EXE файл - только ввод строки работает, по крайней мере что-то ввести можно. Хотя если попробывать вывести на экран строку до вызова inputString - строка не выводится. Кто-нибудь может подсказать возможную причину? Как может программа выполняться по шагам, но вне TD не работать?

Добавлено через 15 минут
Я протупил. В макросе testing строку не выводил. Терь нашел, где не выводит на экран - в макросе inputString все символы вводятся, но почему то как нажимаю Enter - строка "TEST", которая должен выводить макрос testing, не выводится, хотя его вставил в 54 строку. Если же где либо до этого момента вызвать testing - то строка TEST выводится, все рабботает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 23:19
Ответы с готовыми решениями:

Перевод инфиксного выражения в постфиксную форму
Всем привет! Ребят нужна ваша помощь! С использованием стеков разработать...

Перевод обычного (инфиксного) выражения в польскую инверсную запись
Напишите программу перевода обычного(инфиксного) выражения в польскую инверсную...

Перевод инфиксного выражения в постфиксное (обратная польская запись)
Всем привет! Надо с помощью стека на динамическом массиве реализовать перевод...

Преобразование инфиксного выражения в постфиксное
помогите написать программу в паскале преобразование инфиксного выражения в...

Построение дерева инфиксного скобочного выражения
Лабораторная: построить и вывести дерево инфиксного скобочного выражения. Что...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 23:19

Постфиксный инкремент , представление в памяти выражения ?
Объясните пожалуйста доходчиво как это происходит в памяти , не могу понять...

Программа рекурсивного спуска выражения и перевода в постфиксный вид
Здраствуйте всем. Задали задание: Написать программу рекурсивного спуска...

Преобразование из инфиксного в постфиксное выражение
Привет! Столкнулся вот с какой неприятностью, нужно ввести выражение в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru