es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo define un número decimal en una gramática PEG?

Tengo la siguiente gramática:

Arithmetic:
    Term     < Factor (Add / Sub)*
    Add      < "+" Factor
    Sub      < "-" Factor
    Factor   < Primary (Mul / Div)*
    Mul      < "*" Primary
    Div      < "/" Primary
    Primary  < Parens / Neg / Pos / Number / Variable
    Parens   < "(" Term ")"
    Neg      < "-" Primary
    Pos      < "+" Primary
Dot      &lt; &quot;.&quot;
Decimal  &lt; ~(digit+ Dot? digit*)
Integer  &lt; digits
Number   &lt; Integer / Decimal

Function &lt; identifier (space+ Primary)+
Variable &lt;- identifier

Casi todo funciona correctamente, excepto cuando intento analizar un decimal (como 0.5), no funciona. ¿Cuál es la sintaxis correcta para definir un analizador de decimales en PEG?

Estoy usando la biblioteca Pegged en d-lang. Puedes ver la documentación aquí.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para definir un analizador Decimal en PEG usando la biblioteca Pegged en D-lang, puedes usar la siguiente sintaxis:

    Decimal <~ ~(digit+ '.' digit*) / ~(digit* '.' digit+)
    

    Esto define una nueva regla llamada Decimal. El operador ~ indica negación, y los símbolos + y * indican una o más y cero o más repeticiones, respectivamente.

    La expresión regular ~(digit+ '.' digit*) coincide con una cadena de dígitos seguida de un punto y cero o más dígitos (por ejemplo, “123.456”), mientras que ~(digit* '.' digit+) coincide con cero o más dígitos seguidos de un punto y uno o más dígitos (por ejemplo, “.456”).

    Al usar el operador + para indicar que uno o ambos patrones pueden estar presentes, el analizador será capaz de coincidir con ambos tipos de números decimales.

Comments are closed.