JSON5 in dbStatic: Modify lexer's number support

dbLex.l acceps a leading or trailing decimal point with float/double
values and an explicit leading + on all numbers.
Tested in dbStaticTest.db but only passing tests.
This commit is contained in:
Andrew Johnson
2020-07-21 23:33:37 -05:00
parent 980711589a
commit fa4af8b27d
2 changed files with 48 additions and 3 deletions

View File

@@ -25,10 +25,15 @@ hexdigit [0-9a-fA-F]
unicodechar ({backslash}"u"{hexdigit}{4})
jsonchar ({normalchar}|{escapedchar}|{unicodechar})
jsondqstr ({doublequote}{jsonchar}*{doublequote})
int ("-"?([0-9]|[1-9][0-9]+))
sign ([+-]?)
int ({sign}([0-9]|[1-9][0-9]+))
frac ("."[0-9]+)
exp ([eE][+-]?[0-9]+)
number ({int}{frac}?{exp}?)
exp ([eE]{sign}[0-9]+)
jsonnum ({int}{frac}?{exp}?)
intexp ({int}"."{exp}?)
fracexp ({sign}{frac}{exp}?)
number ({jsonnum}|{intexp}|{fracexp})
%{
#undef YY_INPUT

View File

@@ -6,3 +6,43 @@ record(x, "testrec") {
alias("testrec", "testalias2")
alias("testalias2", "testalias3")
# New number formats allowed in JSON5, show dbLex/dbYacc parsing
record(x, "t1") {
field( C8, +12)
field( U8, +123)
field(I16, +1234)
field(U16, +12345)
field(I32, +123456)
field(U32, +1234567)
field(I64, +12345678)
field(U64, +123456789)
field(F32, .123)
field(F64, .123)
field(F32, 123.)
field(F64, 123.)
field(F32, +.123)
field(F64, +.123)
field(F32, +123.)
field(F64, +123.)
field(F32, -.123)
field(F64, -.123)
field(F32, -123.)
field(F64, -123.)
field(F32, .123e4)
field(F64, .123e4)
field(F32, 123.e4)
field(F64, 123.e4)
field(F32, 123.e+4)
field(F64, 123.e+4)
field(F32, 123.e-4)
field(F64, 123.e-4)
field(F32, +.123e4)
field(F64, +.123e4)
field(F32, +123.e4)
field(F64, +123.e4)
field(F32, -.123e4)
field(F64, -.123e4)
field(F32, -123.e4)
field(F64, -123.e4)
}