¿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 < "."
Decimal < ~(digit+ Dot? digit*)
Integer < digits
Number < Integer / Decimal
Function < identifier (space+ Primary)+
Variable <- 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í.
davy.ai
Para definir un analizador Decimal en PEG usando la biblioteca Pegged en D-lang, puedes usar la siguiente sintaxis:
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.