-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HEX Numeric notation not supported #62
Comments
Those aren’t valid EDN: https://github.com/edn-format/edn#integers |
Yes, HEX notation is not defined by the spec - only "plain" integers. There are edn parsers that work with hex, though. Being liberal like that is good, but unless the communicating parties have agreed to that, they cannot claim that they talk edn. One should properly support hex through an extension. Also see, edn-format/edn#47 |
Yeah, this is why I dislike the EDN format from a parser implementation perspective: there’s no unique spec for it. Anyway, do you want to try and make a pull-request about this? edn_format/edn_format/edn_lex.py Lines 217 to 222 in 0d4c213
You can add tests here: Lines 93 to 95 in 0d4c213
|
There is one unique spec. It is defined here: What implementations allow for, doesn't make the spec less of a spec - it makes the implementation more liberal. This is fine technically, but it does confuse reasoning about what is "actually" supported. This is solved very easily by reading the spec (which is short and simple). Technically, this could be solved with "strict" (or "lax") flag on the parser. If we want to make edn_format more liberal, to accept integers in hex format, then this should be a separate token type (to easily use it in "lax" mode, or ignore it in "strict" mode), ie btw, |
By "spec" I meant something strict like a BNF grammar. The EDN document starts with:
We’re left with either that document or Clojure’s reference implementation. However, Clojure doesn’t respect that spec: it supports things that aren’t spec’d (like ratios edn-format/edn#64 or With no update to that document since 2014, parser implementers are left alone. |
@swaroopch It’s your call, your’re the owner 😃 What do you want to do here? Should The flag solution may be interesting, but it significantly complicates the code because it means dynamically changing the grammar. I think it makes sense to support (pr-str 1/3) ; => "1/3"
(pr-str 0xFF) ; => "255" |
@hipitihop @c00kiemon5ter @bfontaine Thanks for the great discussion on this topic 👍🏼 My inputs are:
|
* Convert requirements from exact to minimum Fixes swaroopch#40 * Bump version to 0.5.13 * LICENSE: bump year * Fix ambiguous variable name (swaroopch#44) * Add a Changelog * Fix parsing of exact-precision floats with a negative exposant (swaroopch#47) * Accept missing printable ASCII chars (swaroopch#45) * Add a sort_sets optional keyword argument to dump (swaroopch#42) * add failing unit test * add ImmutableList * use ImmutableList on code * fix latin * conform to flake8 * add test * add placeholder file * workaround for limitation on the image downstream * remove conda.txt file * add docstring * descend from Sequence instead of MutableSequence * copy explicitly * remove MutableSequence tests * bump version * fix formatting * use copy.copy() as .copy() is not available for lists on python2 * remove redundant tests * simplify condition * Raise custom exceptions on syntax errors (swaroopch#46) * Add CONTRIBUTING.md (swaroopch#48) * Handle fractions edn-format/edn#64 * Handle #_ Fixes #4. Note it doesn’t support top-level #_ usage such as in: foo #_ bar * Add tests for #_ * Tweak README regarding caveats + mention @bfontaine contributor * Bump version to 0.6.0 Thanks @bfontaine and @konr! * Add v0.6.0 to the Changelog * Run Travis tests on latest Python 3.7 * Use dist: xenial * Use mutable data structures to improve parsing time Previously a list was used to hold the intermediate results during parsing of "expressions", but each expression was prepended by copying, Fixing this takes parsing from quadratic to linear time. * Bump version to 0.6.1 * Update setup.py to 0.6.1 * Various code simplifications (swaroopch#53) * Parse nil and booleans as symbols (swaroopch#54) * Add Vagrantfile for local dev * Use collections.abc instead of collections Fixes swaroopch#55 * Fix build issues https://travis-ci.org/swaroopch/edn_format/jobs/475411817 * Fix Python 2.x compatibility https://travis-ci.org/swaroopch/edn_format/jobs/475413453 * Bump version to 0.6.2 * DRY the requirements Move from setup.py to only requirements.txt * Add badge for PyPI version * add support for unicode char literals * fixed indentation in test_sort_keys * combined version_info checks in edn_format/edn_lex.py Co-Authored-By: LeXofLeviafan <lexofleviafan@gmail.com> * fixed comment in char token definition * made changes according to flake8 demands * Bump version to 0.6.3 * Travis : Upgrade Ubuntu version to latest LTS, bionic * Use tag signing * Add an edn_parse.tag decorator, + docs and tests on tags (swaroopch#59) * Contributor Notes: replace the deprecated commands * Version 0.6.4 * Move contributor notes in CONTRIBUTING.md (swaroopch#61) * Add edn_format.loads_all to parse all expressions in a string (swaroopch#60) * Parse hexadecimal notation Fixes swaroopch#62. * Disallow 0-prefixed integers From the spec: > No integer other than 0 may begin with 0. * Release v0.6.5 * Bump version to 0.6.5-nu
* Convert requirements from exact to minimum Fixes swaroopch#40 * Bump version to 0.5.13 * LICENSE: bump year * Fix ambiguous variable name (swaroopch#44) * Add a Changelog * Fix parsing of exact-precision floats with a negative exposant (swaroopch#47) * Accept missing printable ASCII chars (swaroopch#45) * Add a sort_sets optional keyword argument to dump (swaroopch#42) * add failing unit test * add ImmutableList * use ImmutableList on code * fix latin * conform to flake8 * add test * add placeholder file * workaround for limitation on the image downstream * remove conda.txt file * add docstring * descend from Sequence instead of MutableSequence * copy explicitly * remove MutableSequence tests * bump version * fix formatting * use copy.copy() as .copy() is not available for lists on python2 * remove redundant tests * simplify condition * Raise custom exceptions on syntax errors (swaroopch#46) * Add CONTRIBUTING.md (swaroopch#48) * Handle fractions edn-format/edn#64 * Handle #_ Fixes #4. Note it doesn’t support top-level #_ usage such as in: foo #_ bar * Add tests for #_ * Tweak README regarding caveats + mention @bfontaine contributor * Bump version to 0.6.0 Thanks @bfontaine and @konr! * Add v0.6.0 to the Changelog * Run Travis tests on latest Python 3.7 * Use dist: xenial * Use mutable data structures to improve parsing time Previously a list was used to hold the intermediate results during parsing of "expressions", but each expression was prepended by copying, Fixing this takes parsing from quadratic to linear time. * Bump version to 0.6.1 * Update setup.py to 0.6.1 * Various code simplifications (swaroopch#53) * Parse nil and booleans as symbols (swaroopch#54) * Add Vagrantfile for local dev * Use collections.abc instead of collections Fixes swaroopch#55 * Fix build issues https://travis-ci.org/swaroopch/edn_format/jobs/475411817 * Fix Python 2.x compatibility https://travis-ci.org/swaroopch/edn_format/jobs/475413453 * Bump version to 0.6.2 * DRY the requirements Move from setup.py to only requirements.txt * Add badge for PyPI version * add support for unicode char literals * fixed indentation in test_sort_keys * combined version_info checks in edn_format/edn_lex.py Co-Authored-By: LeXofLeviafan <lexofleviafan@gmail.com> * fixed comment in char token definition * made changes according to flake8 demands * Bump version to 0.6.3 * Travis : Upgrade Ubuntu version to latest LTS, bionic * Use tag signing * Add an edn_parse.tag decorator, + docs and tests on tags (swaroopch#59) * Contributor Notes: replace the deprecated commands * Version 0.6.4 * Move contributor notes in CONTRIBUTING.md (swaroopch#61) * Add edn_format.loads_all to parse all expressions in a string (swaroopch#60) * Parse hexadecimal notation Fixes swaroopch#62. * Disallow 0-prefixed integers From the spec: > No integer other than 0 may begin with 0. * Release v0.6.5 * Merge with upstream * Remove repeated tests * Undo some changes after the merge * Fix regex for t_FLOAT * Add more test cases * Refactor t_FLOAT regex
Hex notation e.g.
0xFFDC73
causes traceback:Sample EDN:
pip details:
The text was updated successfully, but these errors were encountered: