diff options
author | Chris Drake <cjdrake@users.noreply.github.com> | 2020-05-26 12:58:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-26 21:58:05 +0200 |
commit | 30f060ddfd1aadf41d1b33eae3cde49a6ee57495 (patch) | |
tree | bdb4083dd93198d45d7bbcf0f354ddc93cc09cc7 /pygments/lexers/hdl.py | |
parent | 66a949b8e0e5fac42d6006ed66d728808a110633 (diff) | |
download | pygments-git-30f060ddfd1aadf41d1b33eae3cde49a6ee57495.tar.gz |
Update SystemVerilog literal constants (#1460)
The original implementation was missing some of the more arcane features
such as underbars, the character 's' for signed/unsigned, support for
spaces before/after the base specifier, capital letter base specifiers
(ie 'B 'D 'H), and the 4-state 'xXzZ?' characters.
For regular integers, the 'l' and 'L' suffixes are not valid.
That is, unlike C, in Verilog '42L' is not a valid int literal.
Create a new test that exercises most of the interesting kinds of
SystemVerilog numbers.
This fixes a couple minor issues with what type of number the lexer
returns. For example, Numbers like '42' used to return Integer.Hex,
but now return Integer.Decimal.
Diffstat (limited to 'pygments/lexers/hdl.py')
-rw-r--r-- | pygments/lexers/hdl.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/pygments/lexers/hdl.py b/pygments/lexers/hdl.py index 2e64b8e9..1472b5df 100644 --- a/pygments/lexers/hdl.py +++ b/pygments/lexers/hdl.py @@ -162,14 +162,22 @@ class SystemVerilogLexer(RegexLexer): (r'[{}#@]', Punctuation), (r'L?"', String, 'string'), (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char), + (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float), (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float), - (r'([0-9]+)|(\'h)[0-9a-fA-F]+', Number.Hex), - (r'([0-9]+)|(\'b)[01]+', Number.Bin), - (r'([0-9]+)|(\'d)[0-9]+', Number.Integer), - (r'([0-9]+)|(\'o)[0-7]+', Number.Oct), - (r'\'[01xz]', Number), - (r'\d+[Ll]?', Number.Integer), + + (r'([1-9][_0-9]*)?\s*\'[sS]?[bB]\s*[xXzZ?01][_xXzZ?01]*', + Number.Bin), + (r'([1-9][_0-9]*)?\s*\'[sS]?[oO]\s*[xXzZ?0-7][_xXzZ?0-7]*', + Number.Oct), + (r'([1-9][_0-9]*)?\s*\'[sS]?[dD]\s*[xXzZ?0-9][_xXzZ?0-9]*', + Number.Integer), + (r'([1-9][_0-9]*)?\s*\'[sS]?[hH]\s*[xXzZ?0-9a-fA-F][_xXzZ?0-9a-fA-F]*', + Number.Hex), + + (r'\'[01xXzZ]', Number), + (r'[0-9][_0-9]*', Number.Integer), + (r'\*/', Error), (r'[~!%^&*+=|?:<>/-]', Operator), (r'[()\[\],.;\']', Punctuation), |