Pergunta

A base de software que estou desenvolvendo para usos uma quantidade signficant de yacc que eu não preciso de lidar. Algumas vezes eu acho que seria útil para compreender alguns problemas que eu encontrar, mas na maioria das vezes eu posso fugir com a minha completa ignorância do yacc.

A minha pergunta existem suficientes novos projetos lá fora, que o uso ainda yacc para justificar o tempo eu vou ter de aprender?

Edit: Dada a resposta é principalmente em favor de aprender Yacc, existe uma linguagem semelhante que você recomendaria sobre yacc

?
Foi útil?

Solução

Sim, essas ferramentas são vale a pena aprender se você precisar criar ou modificar código que analisa a gramática.

Por muitos anos, a ferramenta de fato para a geração de código para analisar uma gramática foi yacc, ou seu GNU primo, bisões.

Ultimamente tenho ouvido há um par de miúdos novos no bloco, mas o princípio é o mesmo: você escreve uma gramática declarativa em um formato que é mais ou menos em Backus-Naur Form ( BNF ) e yacc / bison / whatever gera algum código para você que seria extremamente entediante para gravação com a mão.

Além disso, os princípios por trás gramáticas pode ser muito útil para aprender, mesmo se você não precisa trabalhar em tal código diretamente. Eu não tenho trabalhado com analisadores muito desde que assumiu um curso sobre Compiler projeto na faculdade, mas pilhas de tempo de execução compreensão, analisadores de verificação à frente, avaliação de expressão, e um monte de outras coisas relacionadas me ajudou imensamente a escrever e depurar o meu código de forma eficaz.

Editar: Dada a sua pergunta de acompanhamento sobre outras ferramentas, Yacc / Bison é claro são os melhores para projetos C / C ++, uma vez que geram código C. Existem ferramentas semelhantes para outras línguas. Nem todas as gramáticas são equivalentes, e alguns geradores de analisador só pode Grokar gramáticas de uma certa complexidade. Então você pode precisar de encontrar uma ferramenta que pode analisar a sua gramática. Consulte http://en.wikipedia.org/wiki/Comparison_of_parser_generators

Outras dicas

Eu não sei sobre novos projetos de usá-lo, mas eu estou envolvido em sete trabalhos de manutenção diferentes que usam lex e yacc para o processamento de arquivos de configuração.

No XML para mim, não-sir-ee: -).

Soluções usando lex / yacc são um passo para cima dos velhos arquivos de configuração de linhas key=val uma vez que permitem estruturas mais hierárquicas como:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

E, sim, eu sei que você pode fazer isso com XML, mas estes são principalmente aplicações legadas escritos em C e, para ser honesto, eu provavelmente usar lex / yacc para novos postos de trabalho (não-Java) também.

Isso é porque eu prefiro entregar software no prazo e orçamento, em vez de entregar a maior tecnologia nova whiz-bang - meus clientes não vai pagar pela minha educação, eles querem resultados em primeiro lugar e eu já estou especialista em lex / yacc e ter todo o código do modelo para fazê-lo rapidamente.

A regra geral: código dura um longo tempo, então as tecnologias utilizadas nesse código durar um longo tempo, também. Seria preciso uma quantidade enorme de tempo para substituir a base de código que você menciona (levou 15 anos para construí-lo ...), que por sua vez implica que ele ainda será em torno de 5, 10 ou mais anos. (Há ainda uma chance de que alguém que lê esta resposta vai acabar trabalhando nisso!)

Outra regra de ouro: se uma tecnologia de uso geral é bastante comum que você encontrou-o já, é o suficiente, provavelmente comum que você deve se familiarizar com ele, porque você vai vê-lo novamente um dia. Quem sabe: por familiarizar-se com ele, talvez você adicionou uma ferramenta útil para sua caixa de ferramentas ...

Yacc é uma dessas tecnologias:. Você provavelmente vai correr para ele de novo, não é tão difícil, e os princípios que você vai aprender se aplicam a toda a família de construtores analisador

PEGs são o hotness novo, mas ainda há uma tonelada de projetos que utilizam yacc ou ferramentas mais modernas do yacc. Eu franzir a testa em um novo projeto que escolheu usar yacc, mas para projetos existentes portar para uma ferramenta mais moderna pode não fazer sentido. Isto faz com familiaridade áspera com yacc uma habilidade útil.

Se você está totalmente familiarizado com o tema de geradores de analisador eu encorajá-lo a aprender sobre um, qualquer um. Muitos dos conceitos são portáteis entre eles. Além disso, é uma ferramenta útil para ter no cinturão: uma vez que você sabe que você vai entender como eles muitas vezes pode ser superior em comparação com regex pesada mão analisadores escritas. Se você já está confortável com o tópico de analisadores, eu não me preocuparia com isso. Você vai aprender yacc se e quando você precisa, a fim de fazer alguma coisa.

Eu trabalho em projetos que utilizam Yacc. Não novo código -., Mas eles foram novo, eles ainda usaria Yacc ou um parente próximo (Bison, byacc, ...)

Sim, eu considerá-lo como vale a pena aprender se você trabalha em C.

Considere também ANTLR, ou outros geradores de analisador mais modernos de aprendizagem. Mas o conhecimento de Yacc você vai ficar em boa posição -. Ele vai te ajudar a aprender quaisquer outras ferramentas semelhantes também, já que um monte de teoria básica é semelhante

Eu não sei sobre yacc / bison especificamente, mas eu tenho usado antlr, copo, jlex e javacc. Eu pensei que eles só seria de importância accademic, mas como se vê precisávamos de uma linguagem específica de domínio, e isso nos deu uma solução mais agradável tanto que alguns "simples" (regex base) analisadores lá fora. Manutenção pode ser um problema em muitos ambientes, embora -. Pois a maioria dos codificadores nos dias de hoje não terá qualquer experiência com ferramentas de análise

Eu não tive a oportunidade de compará-lo com outros sistemas de análise, mas eu posso definitivamente recomendo ANTLR com base na minha própria experiência e também com a sua grande e ativa base de usuários.

Outro ponto positivo para ANTLR é ANTLRWorks: O ANTLR GUI Development Environment que é uma grande ajuda, enquanto desenvolvimento e depuração de suas gramáticas. Eu ainda tenho que ver um outro sistema de análise que é apoiado por um tal IDE.

Estamos escrevendo novo código yacc na minha empresa para o transporte de produtos. Sim, este material ainda é usado.

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