Recursos para lexing, tokenising e análise em python

votos
51

as pessoas podem apontar-me a recursos on lexing, analisar e tokenising com Python?

Eu estou fazendo um pouco de hacking em um projeto open source ( Hotwire ) e queria fazer algumas mudanças para o código que lexes , analisa e tokenises os comandos inseridos nele. Como se trata de código de trabalho real, é bastante complexo e um pouco difícil de trabalhar fora.

Eu não tenho trabalhado em código para lex / análise / tokenise antes, então eu estava pensando uma abordagem seria a trabalhar através de um tutorial ou dois sobre este aspecto. Espero aprender o suficiente para navegar em torno do código eu realmente quero alterar. Há algo adequado lá fora? (Idealmente, poderia ser feito em uma tarde sem ter que comprar e ler o livro dragão em primeiro lugar ...)

Edit: (7 Out 2008) Nenhuma das respostas abaixo bastante dar o que eu quero. Com eles eu poderia gerar analisadores a partir do zero, mas eu quero aprender a escrever meu próprio analisador básica a partir do zero, sem usar lex e yacc ou ferramentas similares. Tendo feito isso então eu posso entender o código existente melhor.

Então alguém poderia me aponte para um tutorial onde eu possa construir um analisador básica a partir do zero, usando apenas Python?

Publicado 31/08/2008 em 17:50
fonte usuário
Em outras línguas...                            


8 respostas

votos
28

Eu sou um usuário feliz de PLY . É uma implementação puro-Python de Lex & Yacc, com lotes de pequenas sutilezas que o tornam bastante Pythonic e fácil de usar. Desde Lex & Yacc são as léxico e de análise ferramentas mais populares e são usados para a maioria dos projetos, PLY tem a vantagem de pé sobre ombros de gigantes. Um monte de conhecimento existe on-line sobre Lex & Yacc, e você pode aplicar livremente para camadas.

PLY também tem uma boa página de documentação com alguns exemplos simples para você começar.

Para obter uma lista dos lotes de Python parsing ferramentas, consulte este .

Respondeu 20/09/2008 em 06:07
fonte usuário

votos
18

Esta questão é muito velho, mas talvez a minha resposta seria ajudar alguém que queira aprender o básico. I encontrar este recurso para ser muito bom. É um interpretador simples escrito em python, sem o uso de quaisquer bibliotecas externas. Então, isso vai ajudar a qualquer um que gostaria de entender o funcionamento interno de análise, lexing e tokenising:

"A intepreter simples a partir do zero em Python:" Parte 1 , Parte 2 , Parte 3 e Parte 4 .

Respondeu 14/01/2013 em 09:36
fonte usuário

votos
15

Para gramáticas médio complexo, pyparsing é brilhante. Você pode definir gramáticas diretamente no código Python, não há necessidade de geração de código:

>>> from pyparsing import Word, alphas
>>> greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
>>> hello = "Hello, World!"
>>>> print hello, "->", greet.parseString( hello )
Hello, World! -> ['Hello', ',', 'World', '!']

(Exemplo tirado da home page pyparsing).

Com ações de análise (funções que são invocadas quando uma regra determinada gramática é acionado), você pode converter parses diretamente em árvores de sintaxe abstratas, ou qualquer outra representação.

Há muitas funções auxiliares que encapsulam padrões recorrentes, como hierarquias operador, citado strings, comentários de nidificação ou C-estilo.

Respondeu 26/09/2008 em 02:05
fonte usuário

votos
4

Eis algumas coisas para você começar (cerca de simples-a-mais-complexo, menos-a-mais-poderoso):

http://en.wikipedia.org/wiki/Recursive_descent_parser

http://en.wikipedia.org/wiki/Top-down_parsing

http://en.wikipedia.org/wiki/LL_parser

http://effbot.org/zone/simple-top-down-parsing.htm

http://en.wikipedia.org/wiki/Bottom-up_parsing

http://en.wikipedia.org/wiki/LR_parser

http://en.wikipedia.org/wiki/GLR_parser

Quando eu aprendi essas coisas, ele estava em um curso universitário 400 de nível semestre longo. Fizemos uma série de tarefas onde fizemos parsing à mão; se você quer realmente entender o que está acontecendo sob o capô, eu recomendo a mesma abordagem.

Este não é o livro que eu usei, mas é muito bom: Princípios de Compiler projeto .

Esperemos que isso é o suficiente para você começar :)

Respondeu 11/11/2008 em 02:13
fonte usuário

votos
4

pygments é um marcador sintaxe do código fonte escrito em python. Tem lexers e formatadores, e pode ser interessante para espreitar a fonte.

Respondeu 20/09/2008 em 06:15
fonte usuário

votos
4

Ter um olhar para o módulo padrão shlex e modificar uma cópia do mesmo para coincidir com a sintaxe que você usa para o seu shell, é um bom ponto de partida

Se você quer todo o poder de uma solução completa para lexing / análise, ANTLR pode gerar python também.

Respondeu 31/08/2008 em 18:14
fonte usuário

votos
3

Sugiro http://www.canonware.com/Parsing/ , uma vez que é pura python e você não precisa aprender a gramática, mas não é amplamente utilizado, e tem relativamente pouca documentação. O peso pesado é ANTLR e pyparsing. ANTLR pode gerar java e analisadores C ++ também, e caminhantes AST mas você vai ter que aprender o que equivale a uma nova língua.

Respondeu 01/09/2008 em 00:14
fonte usuário

votos
1

Frederico Tomassetti teve um bom (mas curto) concisa write-up para todas as coisas relacionadas a partir BNF para decifrar binário em:

  • lexical,
  • parser,
  • resumo árvore-sintaxe (AST), e
  • Construir / code-gerador.

Ele até mencionou a nova gramática análise da expressão (PEG).

https://tomassetti.me/parsing-in-python/

Respondeu 05/01/2019 em 21:13
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more