Pergunta

O que eu estou tentando fazer isso é escrever um analisador simples para o caso seguinte no .NET

( [PART3]function1() AND [PART4]function7() ) OR [PART2]function90() 
  • [PART] indica o local de avaliação, (assumir que este é enorme arquivo de texto, Parte separa arquivos de texto em pedaços grandes)
  • function() s são minha função documentado que pode ser chamado através deste consultas. Devoluções true ou false
  • Com base nesta True/False e outros operadores entre, quero combinar os resultados e retornar um final de Verdadeiro ou Falso de toda a entrada.

Qual é a melhor forma de implementar tal coisa em .NET, há alguma biblioteca fácil que me permite integrar este, ou devo apenas escrever um analisador simples e, em seguida, fazer isso por mim?

P.S. Eu não poderia encontrar um título bom para a questão.

Foi útil?

Solução

Looks como condição simples, tão na minha opinião você não precisa produtor compilador completo. Posso sugerir que você olhar para Reverse Polish Notation , usá-lo para desembrulhar suas condições na pilha, e em seguida, avaliar resultando pilha usando interpretação simples.

Outras dicas

Tente Ironia , embora não está pronto para o horário nobre (ainda), ele mostra alguma promessa.

A ironia é um kit de desenvolvimento para a implementação de línguas na plataforma .NET. Ele usa a flexibilidade e poder da linguagem C # e .NET Framework 3.5 para implementar um completamente novo e simplificado tecnologia da construção de compiladores. Ao contrário da maioria das soluções existentes / estilo lex yacc Ironia não utiliza qualquer geração de código scanner ou analisador de especificações gramaticais escritos em uma meta-linguagem especializada. Em Ironia a gramática língua de destino está codificada directamente em C # utilizando sobrecarga de operador para expressar construes de gramática. módulos de scanner e analisador de ironia usar a gramática codificado como c # classe para controlar o processo de análise.

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