2012-02-09 9 views
5

¿Cuál es la mejor forma de alimentar a Antlr con un gran número de tokens? Digamos que tenemos una lista de 100,000 verbos en inglés, ¿cómo podríamos agregarlos a nuestra gramática? Podríamos incluir un gran archivo de gramática como verbos.g, pero tal vez hay una manera más elegante, modificando un archivo .token, etc.Fichas Antlr del archivo

grammar verbs; 

VERBS: 
'eat' | 
'drink' | 
'sit' | 
... 
... 
| 'sleep' 
; 

También deberían los tokens más bien ser analizadoras o analizador tokens, es decir, verbos: o verbos:? Probablemente VERBS :.

+0

Actualización: Un archivo english_verbs.g no puede ser consumido por antlr a pesar de t El hecho de que no hay caracteres especiales se producen: en org.antlr.tool.GrammarSanity.traceStatesLookingForLeftRecursion (GrammarSanity.java:149) ... (se repite 10^99 veces) –

+0

Lo que sea que haga probablemente pruebe los límites del reconocedor. – dasblinkenlight

+1

No, no hay forma de que pueda crear un lexer con muchas reglas. Para un trabajo alrededor, mira: http://stackoverflow.com/questions/9008134/dynamically-create-lexer-rule –

Respuesta

2

Preferiría usar predicados semánticos.

Para ello hay que definir un símbolo de

word : [a-z]+ 

y en cada sitio que desee usar un verbo (en lugar de una palabra genérica) poner un predicado semántico que comprueba si la palabra analizada está en la lista de verbos

Usando recomiendan no utilizar el analizador/analizador léxico para tal tarea

  • cada verbo adicional sería cambiar la gramática
  • cada verbo adicional amplía el código generado
  • La conjugación es más fácil
  • superior/minúscula podría manejarse más fácil