Tópico: Relação entre analisador léxico e analisador
Termos usados (toque padrão lexema e atributo) . Exercícios
A relação entre o analisador léxico eo analisador é uma relação senhor-escravo . A
demanda léxico sintático para ler o seguinte caule e lê os caracteres necessários no arquivo de entrada até chegar completar um token que será entregue ao seu mestre ( parser. O analisador léxico lê caractere por caractere e o arquivo de entrada é armazenar esses caracteres em um buffer. Quando você vê um personagem que não é usado para construir um válido e envia tokens para o analisador acumulados e aguarda um novo pedido para ler os caracteres. Quando você receber um novo analisador pedido limpa o buffer e lê o personagem onde parou da última vez (desde que não pertencia ao token que foi enviado ) Exemplo: Suponhamos que temos um arquivo de entrada com o seguinte conteúdo . Int x; Main () { }
O analisador léxico vai fazer essas operações
Entrada Buffer Acción
i i Leer otro carácter n in Leer otro carácter t int Leer otro carácter Espacio en blanco int Enviar token e limpar o buffer x x Leer otro carácter ; x Enviar token e limpar o buffer ; ; Leer otro carácter m ; Enviar token e limpar o buffer m m Leer otro carácter a ma Leer otro carácter i mai Leer otro carácter n main Leer otro carácter ( main Enviar token e limpar o buffer ( ( Leer otro carácter ) ( Enviar token y limpiar buffer Espacio en blanco ) Enviar token y limpiar buffer { { Leer otro carácter } { Enviar token e limpar o buffer Fin del fichero } } Enviar token e limpar o buffer Um aspecto importante é que o leitor deve ler o mais longo possível token. Se não for possível, pelo menos diminuir tempo ele é válido e , em seguida, voltar a ler você descartar para o próximo token . Termos usados nesta fase: Símbolo da haste padrão e atributos. Padrão : é uma representação lógica de um certo número de grupos de caracteres com características comuns Exemplo em Java identificador de uma variável pode ser qualquer combinação de letras e números eo símbolo de sublinhado não começando com números.El padrão sério definição formal do que temos dito para descrever formalmente , esta definição de expressões regulares são usadas. As expressões regulares também são usados em teorias de autômatos e são a maneira de ver as entradas válidas para um autômato. Exemplo de identificadores de variáveis em Java seria: Carta :: = (a- z A- Z) Digit :: = (0-9) Sublinhe :: = (-) ID :: = (sublinhado / letra ) (grifo / letra / dígito) * Lexema . Em cada uma das combinações de caracteres que se enquadram na definição de um padrão. Exemplo: A seqüência de variáveis " variable1 ", " x ", " y 12" ajuste ID em uma variável em java ou seja, O padrão é a definição formal e as seqüências lexema cada um dos quais pode se encaixam na definição . Símbolo : é o nome dado a cada padrão definido. Este nome será utilizado nos seguintes processos de análises , em nome de todos os lexemes encontrados . Onde símbolo rendas gramática caber cada lexemas que representam . Lexemas em concreto são representados em um token. Exemplo A palavra de frutas banana etc -------------- lexema . * O analisador léxico passa o lexema não só o sintático , mas também o token que é passado para ele um par (Token , lexema )