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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2010, 15:09   #1
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
Радость Синтаксический анализатор

Всем привет! Пишу прогу на Delphi, мне необходимо перевести код С++ на Delphi. Некоторую часть перевел, но у меня выдает ошибку, хотя не все типы знаю. Вот пример кода на С++
Код:
                AnsiString buf;
		buf = Edit1->Text;
		int leng = buf.Length();

		int shabl [6][11] = {
		/* -   */{1,-1,3,-1,4,4,4,3,-2,-2,-2},
		/* ch  */{7,2,-1,2,5,-1,-1,-1,-2,-2,-2},
		/* sig */{-1,-1,3,-1,-1,4,4,3,-2,-2,-2},
		/* (   */{4,-1,-1,4,4,-1,-1,-1,-2,-2,-2},
		/* )   */{-1,-1,-1,-1,-1,6,6,-1,-2,-2,-2},
		/* nul */{-1,-1,-1,9,-1,10,11,-1,-2,-2,-2}
		};
		int ID,F=0;
		int state = 0;
		for (int i=1; i<=leng; i++){
		char var = buf[i];
	switch (var) {
			case '-':
				ID = 0;
				break;
			case '+':
				ID = 2;
				break;
			case '*':
				ID = 2;
				break;
			case '/':
				ID = 2;
				break;
			case '(':
				ID = 3;
				break;
			case ')':
				ID = 4;
				break;
		default:
			if (isalpha(var))
			 ID = 1;
		}
		state = shabl[ID][state];
Перевел на delphi
Код:
  
  var 
  buf:AnsiString;
  leng:Integer;
  begin
  buf:=edt1.Text;
  leng:=buf.Length();
  .....
Выдает ошибку
Код:
 
  leng:=buf.Length();
,
тип AnsiString - знаю не очень, будьте добры, переведите код на Delphi.Заранее спасибо большое!

Последний раз редактировалось Lifefine; 09.10.2010 в 15:11.
Lifefine вне форума Ответить с цитированием
Старый 09.10.2010, 16:57   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. AnsiString >> String
2. buf.Length(); >> Length(buf);
BOBAH13 вне форума Ответить с цитированием
Старый 09.10.2010, 17:08   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Код:
const
  Shabl: array[0..5, 0..10] of Integer = (
  { -   }(1, -1, 3, -1, 4, 4, 4, 3, -2, -2, -2),
  { ch  }(7, 2, -1, 2, 5, -1, -1, -1, -2, -2, -2),
  { sig }(-1, -1, 3, -1, -1, 4, 4, 3, -2, -2, -2),
  { (   }(4, -1, -1, 4, 4, -1, -1, -1, -2, -2, -2),
  { )   }(-1, -1, -1, -1, -1, 6, 6, -1, -2, -2, -2),
  { nul }(-1, -1, -1, 9, -1, 10, 11, -1, -2, -2, -2));

var
  Buf: string;
  Leng, F, ID, State, i: Integer;
  Ch: char; //это наш var - зарезервированное слово в делфи,
  //потому используем другое имя переменной
begin
  buf := Edit1.Text;
  leng := Length(buf);
  F := 0;
  //State := 0;
  for i := 1 to leng  do
  begin
    Ch := Buf[i];
    State := 0; //сюда переместил, так как State может
    //принять отрицательное значение, а отрицательных индексов у нас нету
    case Ch of
      '-': ID := 0;
      '+': ID := 2;
      '*': ID := 2;
      '/': ID := 2;
      '(': ID := 3;
      ')': ID := 4;
    else
      if True{а тут твое условие вместо True} then
        ID := 0;
    end;
    State := Shabl[ID, State];
    ShowMessage(IntToStr(leng)+ '   ' + IntToStr(State)); //для проверки
  end;
end;
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 09.10.2010 в 17:11.
Roof вне форума Ответить с цитированием
Старый 09.10.2010, 19:42   #4
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

Спасибо! Очень помогли!!! Думал не ответите и начал сам разбираться. Код заработал!
Lifefine вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксический анализатор sin, cos, ln, exp Ruslan-9020 Общие вопросы C/C++ 3 20.05.2013 01:10
Синтаксический анализатор математических выражений Blade Общие вопросы C/C++ 7 21.05.2010 14:59
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50
Синтаксический анализ оператора языка Паскаль Dawystrik Паскаль, Turbo Pascal, PascalABC.NET 2 24.10.2008 09:48