diff options
author | Maxim Logunov <spitty.pnz@gmail.com> | 2016-04-19 17:57:07 +0300 |
---|---|---|
committer | Maxim Logunov <spitty.pnz@gmail.com> | 2016-04-19 17:57:07 +0300 |
commit | 3c835b53d7eeede449d38549461c56bee135fbfd (patch) | |
tree | 720b5faf1df7661570759bfa70b022335f3d90ec | |
parent | ef6cb21358bf39090ddbc047c2b76adee0ac939a (diff) | |
download | pygments-3c835b53d7eeede449d38549461c56bee135fbfd.tar.gz |
Speed up regex for searching numbers in jvm languages
The problem was in expressions like `r'[0-9](_*[0-9]+)*'`. They find numbers which can contains underscores.
Proposed expressions are equivalent (e.g. `r'[0-9][0-9_]*'`). This change significantly improves performance of a whole expression.
-rw-r--r-- | pygments/lexers/jvm.py | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/pygments/lexers/jvm.py b/pygments/lexers/jvm.py index 1a929ce9..5d747561 100644 --- a/pygments/lexers/jvm.py +++ b/pygments/lexers/jvm.py @@ -68,18 +68,18 @@ class JavaLexer(RegexLexer): (r'(\.)((?:[^\W\d]|\$)[\w$]*)', bygroups(Operator, Name.Attribute)), (r'^\s*([^\W\d]|\$)[\w$]*:', Name.Label), (r'([^\W\d]|\$)[\w$]*', Name), - (r'([0-9](_*[0-9]+)*\.([0-9](_*[0-9]+)*)?|' - r'([0-9](_*[0-9]+)*)?\.[0-9](_*[0-9]+)*)' - r'([eE][+\-]?[0-9](_*[0-9]+)*)?[fFdD]?|' - r'[0-9][eE][+\-]?[0-9](_*[0-9]+)*[fFdD]?|' - r'[0-9]([eE][+\-]?[0-9](_*[0-9]+)*)?[fFdD]|' - r'0[xX]([0-9a-fA-F](_*[0-9a-fA-F]+)*\.?|' - r'([0-9a-fA-F](_*[0-9a-fA-F]+)*)?\.[0-9a-fA-F](_*[0-9a-fA-F]+)*)' - r'[pP][+\-]?[0-9](_*[0-9]+)*[fFdD]?', Number.Float), - (r'0[xX][0-9a-fA-F](_*[0-9a-fA-F]+)*[lL]?', Number.Hex), - (r'0[bB][01](_*[01]+)*[lL]?', Number.Bin), - (r'0(_*[0-7]+)+[lL]?', Number.Oct), - (r'0|[1-9](_*[0-9]+)*[lL]?', Number.Integer), + (r'([0-9][0-9_]*\.([0-9][0-9_]*)?|' + r'\.[0-9][0-9_]*)' + r'([eE][+\-]?[0-9][0-9_]*)?[fFdD]?|' + r'[0-9][eE][+\-]?[0-9][0-9_]*[fFdD]?|' + r'[0-9]([eE][+\-]?[0-9][0-9_]*)?[fFdD]|' + r'0[xX]([0-9a-fA-F][0-9a-fA-F_]*\.?|' + r'([0-9a-fA-F][0-9a-fA-F_]*)?\.[0-9a-fA-F][0-9a-fA-F_]*)' + r'[pP][+\-]?[0-9][0-9_]*[fFdD]?', Number.Float), + (r'0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?', Number.Hex), + (r'0[bB][01][01_]*[lL]?', Number.Bin), + (r'0[0-7_]+[lL]?', Number.Oct), + (r'0|[1-9][0-9_]*[lL]?', Number.Integer), (r'[~^*!%&\[\](){}<>|+=:;,./?-]', Operator), (r'\n', Text) ], |