Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

лексический анализатор   Найти похожие ветки 

 
nap   (2005-01-11 15:59) [0]

Пишу лексический анализатор. Возникла запарка:
 после 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;


 
Digitman ©   (2005-01-11 16:03) [1]


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


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


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

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


 
Digitman ©   (2005-01-11 16:11) [3]

ищи ТР Lex&YACC


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

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


 
begin...end ©   (2005-01-11 16:24) [5]

> nap   (11.01.05 15:59)

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

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


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

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

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


 
Digitman ©   (2005-01-11 16:45) [7]


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


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


 
TUser ©   (2005-01-11 17:24) [8]


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

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.032 c
1-1104938585
nekant
2005-01-05 18:23
2005.01.23
сдвиг сообщ. Error


1-1104838682
Afonya
2005-01-04 14:38
2005.01.23
Работа с компонентом TChape


14-1104917688
asdqwer
2005-01-05 12:34
2005.01.23
Реализация длинной арифметики на Паскале и с делением!


1-1105602724
Anonimus
2005-01-13 10:52
2005.01.23
Приложение без форм


9-1097124544
Megabyte-ceercop
2004-10-07 08:49
2005.01.23
Карта с нелинейными тайлами.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский