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?

André Luis

André Luis

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar