Estrutura de dados para gramática? Nunca ouvi falar algo do tipo. O que você pode ter são algoritmos para reconhecer linguagens que obedeçam as regras gerativas da gramática. Quem faz essas coisas são os parsers (analisadores sintáticos). Qual é exatamente seu problema? Você quer verificar se determinada String está contida em uma linguagem?
A
Algebra
Eu preciso implementar algoritmos que trabalham com gramáticas livre de contexto como CKY por exemplo e então preciso saber representar GLC aqui. Por exemplo, G = (N,Sig,R,S).
N= não terminais.
Sig = terminais.
R = Regras.
S = estado inicial.
depois vou trabalhar com parsing de linguagem natural. gostaria de saber como é usual representar gramáticas em java. A principio to criando um monte de classes.
D
davidbuzatto
Conheço a teoria, não precisa explicar
Na verdade a definição formal de uma GLC não é bem assim, mas tudo bem, isso não vem ao caso agora.
Você pode usar o ANTLR para gerar seu parser. http://www.antlr4.org/
Deixa eu ver se sai alguma coisa aqui… Estou com um pouco de sono…
D
davidbuzatto
Segue um exemplo muito bobo de uma gramática do ANTLR, composto por uma regra (identificador) e dois tokens (LETRA e DIGITO).
grammarTeste;
identificador : LETRA (LETRA | DIGITO)* EOF;
LETRA : 'a'..'z' | 'A'..'Z';
DIGITO : '0'..'9';
Usando o ANTLRWorks vc vai escrever sua gramática, preenchê-la com o código Java que você quer que seja executado durante o parse e gerar o parser e o lexer para usar no seu programa. Já te adianto que você vai ter que ler o livro do Terence Parr (pai do ANTLR) para poder usar o gerador satisfatoriamente.