Fórum Identificar letra por letra de uma string #399946
28/04/2011
0
Pessoas, boa tarde.
Tenho que desenvolver uma analisador léxico para matéria de compiladores (3º ano de Ciências da Computação).
O texto para análise sera de um arquivo (do tipo texto). Esse é o lance.
Então, o que já consegui fazer:
1) - Localizo o arquivo e carrego o texto dele para um MEMO
2) - Quebro o MEMO em palavras (strings) dentro de uma STRINGLIST. Utilizo isso com base nos ESPAÇOS e ENTERS que tem no texto.
Agora preciso identificar palavras reservadas, operadores lógicos, relacionais, matemáticos. E meu problema está quando tenho uma linha assim:
IF A=B THEN
BEGIN
A:=A+1;
B:=B-1;
END
ELSE
BEGIN
A:=A-1;
B:=B+1;
END
Preciso identificar os A´s e B´s como variáveis; o ":=" como atribuição; e os "+" e "-"; como operadores lógicos.
Mas, na minha StringList, está assim "A:=A+1".
Como faço para ler letra por letra para identificar cada uma delas??? Alguém tem alguma dica?
Tenho que desenvolver uma analisador léxico para matéria de compiladores (3º ano de Ciências da Computação).
O texto para análise sera de um arquivo (do tipo texto). Esse é o lance.
Então, o que já consegui fazer:
1) - Localizo o arquivo e carrego o texto dele para um MEMO
2) - Quebro o MEMO em palavras (strings) dentro de uma STRINGLIST. Utilizo isso com base nos ESPAÇOS e ENTERS que tem no texto.
Agora preciso identificar palavras reservadas, operadores lógicos, relacionais, matemáticos. E meu problema está quando tenho uma linha assim:
IF A=B THEN
BEGIN
A:=A+1;
B:=B-1;
END
ELSE
BEGIN
A:=A-1;
B:=B+1;
END
Preciso identificar os A´s e B´s como variáveis; o ":=" como atribuição; e os "+" e "-"; como operadores lógicos.
Mas, na minha StringList, está assim "A:=A+1".
Como faço para ler letra por letra para identificar cada uma delas??? Alguém tem alguma dica?
André Luis
Curtir tópico
+ 0
Responder
Posts
28/04/2011
André Silveira
De acordo com os dados fornecidos eu faria uma estrutura mais ou menos parecida com a que tenho abaixo e trataria os dados das linhas.
var
Linha : String;
for i := 0 to StringList.Count - 1 do
begin
Linha := StringList[i].Text;
for j := 0 to length(Linha) - 1 do
begin
if Linha[j] in ('+', '-', '*', '/') then
Inc(Operadores)
else if (Linha[j] = ':') and (Linha[j+1] = '=') then
Inc(Atribuicao)
else
Inc(Variáveis);
end;
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)