tdparser.

Uma biblioteca de análise muito simples, com base no algoritmo de cima para baixo
Baixe Agora

tdparser. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • MIT/X Consortium Lic...
  • Preço:
  • FREE
  • Nome do editor:
  • Raphael Barrois
  • Site do editor:
  • https://github.com/rbarrois/

tdparser. Tag


tdparser. Descrição

O TDParser é uma biblioteca Python que visa fornecer uma maneira eficiente de escrever lexer / analisadores simples em Python, usando o algoritmo de análise de cima para baixo. As bibliotecas Python fornecem ferramentas de análise / lexing (ver http://nedbatchelder.com/text/python -parsers.html para alguns exemplos); Características distintivas do TDParser são: - Evitar definições gramaticais baseadas em DOCRLING - fornecer uma estrutura de analisadores genérica, capaz de lidar com qualquer gramática - não gerar código - deixe o usuário decidir a natureza dos resultados da análise: árvore de sintaxe abstrata, expressão final. ..Examplehere é a definição de um analisador aritmético simples: de TDparser Import Lexer, Tokenclass Integer (token): def __init __ (auto, texto): self.valor = int (texto) def nud (self, contexto): "" " O que o token é avaliado para "" "Retorna o self.valueclass Adição (token): LBP = 10 # Pré-precedência Def LED (auto, Esquerda, Contexto):" "" "Calcule o valor desse token quando entre duas expressões". "" Buscar a expressão à direita, parando no próximo limite # da mesma precedência Right_Side = context.expression (self.lbp) Retorna à esquerda + Substracção Right_Sideclass (token): lbp = 10 # mesma precedência que a adição DEF LED (auto, esquerda, contexto): Retorno à esquerda - context.Expression (self.lbp) def nud (auto, contexto): "" "Quando um '-' está presente à esquerda de Uma expressão. "" "# Isso significa que estamos devolvendo o oposto do próximo retorno de expressão - Context.Expression (self..lbp) multiplicação de classe (token): LBP = 20 # maior precedência do que adição / substraction (auto, Esquerda, Contexto): Retorno Esquerda * Context.Expression (self.lbp) Lexer = Lexer (with_parens = true) léxer.register_token (inteiro, re.compile (r '\ d +')) léxer.register_token (adição, re.crompile (r '\ +')) léxer.register_token (substraction, re.crompile (r '-')) léxer.register_token (multiplicação, re.compile (R '*')) Def Parse (texto): Return Lexer.Parse (Texto) usando ele retorna o valor esperado: >>> Parse ("1 + 1") 2 >>> Parse ("1 + -2 * 3") - 5Adding New Tokens é direto: Divisão de Classe (Token): LBP = 20 # mesma precedência como multiplicação DEF LED (auto, Esquerda, Contexto): Retorno Esquerda // Context.Expression (self.lbp) léxer.register_token (divisão, re.compile (r '/')) e usando:> >> Parse ("3 + 12/3") 7let adiciona o operador de exponentação: Potência de classe (token): LBP = 30 # mais alto que o LED médio (auto, Esquerda, Contexto): # Escolhemos expressões com uma precedência menor, de modo que # 2 ** 3 ** 2 calcula como 2 ** (3 ** 2) Retorno à esquerda ** context.Expression (self.lbp - 1) lexer .Register_token (poder, re.compile (r '\ * \ * *')) e use: >>> anal ("2 ** 3 ** 2") 512product's homepage


tdparser. Software Relacionado