Uso de "abnf"

Hola, sólo me queda un detallito que no consigo funcionar para ser
capaz de compilar a RegExp todo el código ABNF del protocolo SIP.
Explico mi problema con un ejemplo:

Uso “abnf” que es un conversor de ABNF a RegExp:
abnf - converter from ABNF to Regexp

Lo uso así:


require ‘pp’
require ‘abnf’

abnf = <<END
alphanum = ALPHA / DIGIT
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
END

@alphanum = ABNF.regexp(abnf)
pp @alphanum

@ALPHA = ABNF.regexp(abnf,‘ALPHA’)
pp @ALPHA

La primera @alphanum me sale bien:
/[0-9a-z]/i

Pero la segunda @ALPHA me da error:
/usr/local/lib/site_ruby/1.8/abnf/regexp.rb:43:in `regexp_tree’: no
rule defined: ALPHA
(ABNF::ABNFError)

Según el API de la clase ABNF ( source/abnf.rb ):

ABNF
class methods
ABNF.regexp(abnf_description, start_symbol=nil)
converts abnf_description to a Regexp object corresponding
with start_symbol.
If start_symbol is not specified, first symbol in
abnf_description is used.

Por eso yo intento obtener la expresión regular correspondiente al
código ABNF “ALPHA” poniendo como segundo parámetro el supuesto objeto
“ALPHA” (esto es precisamente lo que no entiendo si es así):
@ALPHA = ABNF.regexp(abnf,‘ALPHA’)

Como veis, si no pongo ese segundo parámetro ocurre que “If
start_symbol is not specified, first symbol in abnf_description is
used”, o sea, que me da la RegExp correspondiente al primer objeto del
código ABNF que es precisamente “alphanum” (esto sí funciona bien).

¿Por casualidad alguien ha trabajado alguna vez con ABNF y sabe cómo
puedo obtener el RegExp correspondiente a un “objeto” que no es el
primero en un código ABNF?

Gracias por cualquier sugerencia.

El 13/03/08, Sergio Cambra .:: entreCables - Symbol Servicios
Informáticos S.L. ::. > >

Pero la segunda @ALPHA me da error:
/usr/local/lib/site_ruby/1.8/abnf/regexp.rb:43:in `regexp_tree’: no
rule defined: ALPHA
(ABNF::ABNFError)

¿Has probado usando simbolos?
@ALPHA = ABNF.regexp(abnf, :ALPHA)

El mismo error:

@ALPHA = ABNF.regexp(abnf,:ALPHA)
pp @ALPHA

/usr/local/lib/site_ruby/1.8/abnf/regexp.rb:43:in `regexp_tree’: no
rule defined: ALPHA (ABNF::ABNFError)

:frowning:

Gracias.