Pergunta

Na verdade, talvez não full-blown Lex / Yacc. Estou implementando um front-end-interpretador de comandos para administrar um webapp. Eu estou procurando algo que vai dar uma definição de gramática e transformá-lo em um analisador que invoca diretamente métodos no meu objeto. Semelhante à forma como ASP.NET MVC pode descobrir qual o método de controlador de invocar, e como desembolsar os argumentos.

Assim, se o usuário digita "criar foo" no meu prompt de comando, deve transparente chamar um método:

private void Create(string id) { /* ... */ }

Oh, e se ele poderia gerar texto de ajuda a partir de (por exemplo) atributos nesses métodos do controlador, que seria fantástico, também.

Foi útil?

Solução

Eu não tenho certeza Lex / Yacc vai ser de alguma ajuda. Você só vai precisar de uma tokenizer básica e um intérprete, que são mais rápidos para escrever à mão. Se você ainda está em análise rota ver Ironia .

Como nota: você já pensou em PowerShell e seus commandlets

?

Outras dicas

Eu fiz um par de pequenos projetos com GPLEX / GPPG, que são muito reimplementações simples de LEX / YACC em C #. Eu não usei qualquer uma das outras ferramentas acima, então eu realmente não posso compará-los, mas estes funcionou bem.

GPPG pode ser encontrada aqui e GPLEX aqui .

Dito isto, eu concordo, uma solução LEX / YACC completo provavelmente é um exagero para o seu problema. Eu sugeriria gerando um conjunto de ligações usando IronPython: ele interage facilmente com código .NET, não-programadores parecem encontrar a sintaxe básica bastante útil, e dá-lhe uma grande flexibilidade / potência se você optar por usá-lo.

Também olhar para Antlr , que tem o apoio C #.

Ainda cedo CTP por isso não pode ser usado em aplicativos de produção, mas você pode estar interessado em Oslo / MGrammar: http://msdn.microsoft.com/en-us/oslo/

Jison está recebendo um monte de tração recentemente. É um porto Bison para javascript. Devido à sua natureza extremamente simples, eu tenho portado o Jison análise / lexing modelo para php, e agora para C #. Ele ainda é muito novo, mas se você receber uma chance, dê uma olhada aqui: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

Se você não tem medo alfa software e quer uma alternativa para Lex / Yacc para criar seus próprios idiomas, você pode olhar para Oslo . Eu recomendo que você se sentar através de gravações de sessão de sessões TL27 e TL31 de últimos anos PDC . TL31 aborda directamente a criação de linguagens específicas de domínio usando Oslo.

Coco / R é um gerador de compilador com uma implementação do .NET. Você poderia tentar isso, mas eu não tenho certeza se obter uma biblioteca de trabalho seria mais rápido do que escrever o seu próprio tokenizer.

http: //www.ssw.uni-linz. ac.at/Research/Projects/Coco/

Eu sugeriria csflex - C # porta do Flex -. Mais famoso gerador do scanner unix

Eu acredito que lex / yacc estão em um dos já os SDKs (ou seja RTM). Windows ou .NET Framework SDK.

Jardins Ponto Parser Generator aqui fornece funcionalidade Yacc / Bison para C #. Pode ser donwloaded aqui . Um exemplo útil usando GPPG é fornecido aqui

Como Anton disse, PowerShell é provavelmente o caminho a percorrer. Se você quer um lex / yacc implementação então Malcolm Crowe tem um bom conjunto.

Editar: Direct Link para as ferramentas do compilador

Apenas para o registro, a implementação de lexer e analisador LALR em C # para C #:

http://code.google.com/p/naive-language-tools /

Ele deve ser semelhante em uso para Lex / Yacc, no entanto essas ferramentas (NLT) não são geradores! Assim, esquecer-se sobre velocidade.

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