Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2008, 01:03   #1
adwaer
Пользователь
 
Регистрация: 06.06.2008
Сообщений: 47
Смущение Что то не так с переменными..

Код:
 chOP:=0; ipar:=1;ilpar:=1; iilpar:=1;
    while (word[2][chOP]<>#0) do
    begin
      if(word[2][chOP] = ',') then
      begin
                // lpar - длина операнда после  символ "="
              while ilpar<> ipar do    // ilpar - символ параметра после "="
              begin
                if (par[ilPar] in ['0'..'9'])then   // операнд - число
                begin
                   iilpar:=1;
                   while par[iilpar]<>'' do
                   begin
                      if not(par[iilpar]in['0'..'9'])then
                      begin ET1.Lines.Add('ошибка символа числа');exit;end;
                      inc(iilpar);
                   end;
                end
                else if (par[ilPar]='R')and(par[ilPar+1]in['0'..'9'])and((par[ilPar+2]='')or(par[ilPar+2]in['0'..'9']))and(par[ilPar+3]='') then  // операнд - регист
                     begin
                       if par[ilPar+2]<>''then
                       begin ET1.Lines.Add('превышено кол-во регистров');exit;end;

                     end;
                inc(ilPar);
              end;

      end;
      if not(word[2][chOp]in['0'..'9'])or not(word[2][chop]in['a'..'z'])or not(word[2][chop]in['A'..'Z'])or (word[chop]<>'=')then
      begin ET1.Lines.Add('некорректные символы в операндной части');exit;end;
      if word[2][chop-1]='='then
      begin par[ipar]:=word[2][chOp];inc(ipar);end;
      inc(chOP);
      if ipar<>1 then inc(ipar);
    end;
программа которую тестю:
Код:
TEST  START
      JMP   BEGIN

MAC1  MACRO A=#0,B=#0,C=R0 //    <- По условую обрабатывается эта строка (макрос)
      ADD   C,A
      LOAD  R1,B
      ADD   C,B
      MEND

MAC2  MACRO A=R0,B=#100
      LOAD  A,B
      ADD   A,A
      MEND

BEGIN
      MAC1 A=R1,B=2
      MAC2 B=20
      
      LOAD R1,#10
      WHILE 10
      INC R1
      ADD R0,R1
      ENDW
      
      END  BEGIN
Выдается ошибка неправильного символа..
Вложения
Тип файла: rar spo.rar (221.4 Кб, 11 просмотров)
adwaer вне форума Ответить с цитированием
Старый 19.06.2008, 08:42   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Условие явно неправильное:
if
not (word[2][chOp] in ['0'..'9']) or
not (word[2][chop] in ['a'..'z']) or
not (word[2][chop] in ['A'..'Z']) or
(word[chop]<>'=')
then begin ET1.Lines.Add('Некорректные символы......
-------------------
Почему Вы не применяете форматирование ?
Не пробовали сначали почитать про грамматики ?
(все вопросы риторические)

Глобальные переменые i, j - не лучшая идея

Данные отдельно, представление (StringGrid, Memo) данных отдельно - не надо надо смешивать обработку данных (в Вашем случае разбор текста) и вывод данных на экран.

Если это будет эмуляция процессора, не нужно замахиваться сразу на макросы. Сделайте для начала MOV AX, BX

Употребление ненормативной лексики (в частности в комментариях) говорит о неумении выражать свои мысли.

Последний раз редактировалось alexBlack; 19.06.2008 в 08:46.
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие между переменными в JavaScript и РНР Timpi JavaScript, Ajax 26 04.03.2011 08:38
Работа с переменными в DLL Zeraim Общие вопросы Delphi 3 14.05.2008 23:10