summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Logunov <spitty.pnz@gmail.com>2016-04-19 17:57:07 +0300
committerMaxim Logunov <spitty.pnz@gmail.com>2016-04-19 17:57:07 +0300
commit3c835b53d7eeede449d38549461c56bee135fbfd (patch)
tree720b5faf1df7661570759bfa70b022335f3d90ec
parentef6cb21358bf39090ddbc047c2b76adee0ac939a (diff)
downloadpygments-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.py24
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)
],