![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
лексический анализатор [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]
> Пишу лексический анализатор
= изобретаю велосипед