Pergunta

Dada uma expressão regular, eu estou procurando um pacote que irá gerar dinamicamente o código para uma máquina de estados finitos que implementa o RE.

C / C ++ e Python preferida, mas outras línguas são de interesse também.

Foi útil?

Solução

re2c gera código C. Eu não tenho certeza do que você quer dizer com 'dinâmica' -. AFAIK você teria que compilar e dinâmica carregar a saída, se você quiser chamar o código gerado durante o mesmo prazo que o gerou

Outras dicas

Ragel pode ser o que você está procurando.

Ele gera o código C / C ++ / D / Ruby / Java para máquinas de estado. Estes são descritos usando as duas expressões regulares e operadores.

Verifique o website, sua primeira página é bastante explícito.

Pode não ser exatamente o que você está procurando, mas a Xerox Finite State transdutor suporta expressões regulares, constrói a máquina, e até mesmo pode criar uma representação gráfica utilizando GraphViz.

É muito bacana para coisas como morfologia, mas caso contrário, eu sugiro que, principalmente, se você está procurando algo para explorar o lado teórico de máquinas de estados finitos.

Duas advertências: ele usa sua própria sintaxe, por isso não é necessariamente vai traduzir sobre a seus idiomas de escolha facilmente, e eu tenho certeza que você tem que obter uma licença para isso. Ele vem com o livro de Karttunnen e Beesley "Finite State Morfologia", que é uma leitura muito interessante em seu próprio direito.

O Finite State Automata Utilities suportes geração de FSM de de expressões regulares. Ele também suporta a geração de código C, C ++ e Java para FSM de. Ele suporta a geração dinâmica, mas é escrito em Prolog, e chamando a partir de outro idioma pode ser um aborrecimento.

O que você está pedindo é um lexer ... Há uma abundância deles para uma infinidade de linguagens de programação. Para começar, você pode ter um olhar aqui .

Um bom Python implementação de um conversor de expressões regulares para Finite State Machine é https://github.com/ferno / vegetação . Ele está disponível em pypi via 'pip instalar vegetação'.

Outro usos pacote python verde para implementar analisadores iterativos: Communications Protocol Python Analisador e Originator https://github.com/ pjkundert / cpppo . Ele também está disponível via 'pip instalar cpppo'. Cpppo é, infelizmente, bastante complexo, em grande parte devido a uma tentativa de apoiar tanto Python 2 e 3 da mesma fonte, incluindo a plena compatibilidade UTF-8.

De qualquer forma, cpppo deve lhe dar uma idéia de como aplicar o excelente vegetação Regex ao conversor FSM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top