Proper grammar for REAL values.
authorKim Grasman <kim.grasman@gmail.com>
Sat, 26 Jul 2014 12:52:04 +0000 (14:52 +0200)
committerKim Grasman <kim.grasman@gmail.com>
Sat, 26 Jul 2014 12:52:04 +0000 (14:52 +0200)
Including support for exponent values.

asn1ate/parser.py
testdata/builtin_values.asn

index 09a3954..7baf784 100644 (file)
@@ -178,13 +178,15 @@ def _build_asn1_grammar():
     # values
     # BUG: These are badly specified and cause the grammar to break if used generally.
     # todo: consider more literals from 16.9
-    real_value = Regex(r'-?\d+(\.\d*)?')  # todo: this doesn't really follow the spec
     boolean_value = TRUE | FALSE
     bitstring_value = bstring | hstring  # todo: consider more forms from 21.9
     integer_value = signed_number
     null_value = NULL
     cstring_value = dblQuotedString
 
+    exponent = (Literal('e') | Literal('E')) + signed_number
+    real_value = Combine(signed_number + Optional(Literal('.') + Optional(number)) + Optional(exponent))
+
     builtin_value = boolean_value | bitstring_value | real_value | integer_value | null_value | cstring_value
     external_value_reference = module_reference + Suppress('.') + valuereference
     defined_value = external_value_reference | valuereference  # todo: more options from 13.1
index da87476..c6d5176 100644 (file)
@@ -3,4 +3,9 @@ BEGIN
   -- TRUE and FALSE\r
   trueVal BOOLEAN ::= TRUE\r
   falseVal BOOLEAN ::= FALSE\r
+\r
+  realVal REAL ::= 3.14\r
+  intRealVal REAL ::= 6\r
+  expVal REAL ::= 2.73E12\r
+  intExpVal REAL ::= 4E9\r
 END\r