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.
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.
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.
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.