Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

лексический анализатор [D7, Win95/98, WinXP]


nap ©   (2005-01-11 15:59:00) 

Пишу лексический анализатор. Возникла запарка:
 после 1 скобки '}' в тексте не видит далнейший текст.

var unit_text:TStringList;

var x,y,i,i1,y1:integer;
   tmp:string;
   u1:boolean;
begin
i:=0;
tmp:='';
u1:=false;
while not (i=unit_text.Count) do
begin
  for x:=1 to length(unit_text.Strings[i]) do
   begin
     if x<>length(unit_text.Strings[i]) then
      if unit_text.Strings[i][x]+unit_text.Strings[i][x+1]='//' then
            begin
              inc(i);
              break;
            end;
     if unit_text.Strings[i][x]='{' then
      for i1:=i to unit_text.Count-1 do
       begin
         for y:=1 to length(unit_text.Strings[i1]) do
         begin
          if (i1=i) and (y<x) then y1:=x else y1:=y;
          if unit_text.Strings[i1][y1]='}' then
           begin
             i:=i1;
             u1:=true;
             break;
           end else;
         end;  
       end else;
     if u1 then
        begin
          u1:=false;
          break;
        end else tmp:=tmp+unit_text.Strings[i][x];
   end;
  memo2.Lines.Add(tmp);
  tmp:='';
  inc(i);
end;


TUser   (2005-01-11 17:24:00) [1]


> Digitman ©   (11.01.05 16:11) [3]
> ищи ТР Lex&YACC

yaccесть в CygWin'е. Но ты его не используй. Я видел один язык, очень простой, синтаксис - сишный, да еще и упрощенный по сравнению с Си (очень много чего там не было, начиная с функций). Интерпретируемый. Лек. анализатор написан yacc'ом. Работал отвратительно. По-видимому, я был одним из немногих людей на планете, кто решил-таки с ним разобраться. Потратил 3 дня - и забил, т.к. работать было совершенно невозможно. Поэтому у меня закралось подозрение, что все эти генераторы парсеров использовать не надо. Возможно я не прав.

Пример синт. анализатора для Паскаля можно найти у Вирта - последняя треть книги как раз про это.


Digitman   (2005-01-11 16:45:00) [2]


> nap   (11.01.05 16:23) [4]
> они генерируют исходники на CИ. А как быть с Паскалем


ты гониишь.
ТР L&Y генерит исх.текст именно в Паскале.


nap   (2005-01-11 16:30:00) [3]

создаются таюблицы зарез. слов, чисел, индефикаторов, разделителей

превести в запись вида 0,1 2,45 4,1
где первое число - таблица
после запятой номер слова в таблице


begin...end   (2005-01-11 16:24:00) [4]

> nap   (11.01.05 15:59)

> Пишу лексический анализатор.

Какова его задача?


nap   (2005-01-11 16:23:00) [5]

они генерируют исходники на CИ. А как быть с Паскалем


Digitman   (2005-01-11 16:11:00) [6]

ищи ТР Lex&YACC


nap   (2005-01-11 16:06:00) [7]

Помогите пожалуйста, дайте ссылки на исходники на Delphi.


Digitman   (2005-01-11 16:03:00) [8]


> Пишу лексический анализатор


= изобретаю велосипед


Наверх

Титульная страница Поиск, карта сайта Написать письмо