From: Jeff Ober Date: Wed, 15 Jan 2020 17:09:02 +0000 (-0500) Subject: Another round of performance improvements with a focus on regexp performance X-Git-Tag: nailing-cargo/1.0.0~234^2~38 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=08b2c2c77784950ba10f8b15ec0ab657f1a1b7c3;p=nailing-cargo.git Another round of performance improvements with a focus on regexp performance --- diff --git a/lib/TOML/Tiny/Grammar.pm b/lib/TOML/Tiny/Grammar.pm index 739f677..fa2ba29 100644 --- a/lib/TOML/Tiny/Grammar.pm +++ b/lib/TOML/Tiny/Grammar.pm @@ -27,7 +27,7 @@ our $TOML = qr{ | (?&InlineTable) ) - (? (?> \x0D? \x0A)) + (? \x0D? \x0A) (? (?&NLSeq) | (?&Comment)) (? \x20 | \x09) # (space, tab) @@ -115,10 +115,10 @@ our $TOML = qr{ #----------------------------------------------------------------------------- # Key #----------------------------------------------------------------------------- - (? [-_a-zA-Z0-9]+) - (? (?&BasicString) | (?&StringLiteral)) - (? (?&BareKey) | (?&QuotedKey)) - (? (?&SimpleKey) (?: \x2E (?&SimpleKey) )+) + (? (?> [-_a-zA-Z0-9]+ )) + (? (?> (?&BasicString) | (?&StringLiteral))) + (? (?> (?&BareKey) | (?&QuotedKey))) + (? (?> (?&SimpleKey) (?: \x2E (?&SimpleKey) )+)) (? (?&BareKey) | (?&QuotedKey) | (?&DottedKey)) #----------------------------------------------------------------------------- @@ -136,29 +136,39 @@ our $TOML = qr{ (? [01]) (? [-+]? 0) - (? (?&Zero) | (?: [-+]? (?&DecFirstChar) (?: (?&DecChar) | (?: _ (?&DecChar) ))*)) - (? 0x (?&HexChar) (?: (?&HexChar) | (?: [_] (?&HexChar) ))*) - (? 0o (?&OctChar) (?: (?&OctChar) | (?: [_] (?&OctChar) ))*) - (? 0b (?&BinChar) (?: (?&BinChar) | (?: [_] (?&BinChar) ))*) + (? 0x (?&HexChar) (?> _? (?&HexChar) )*) + (? 0o (?&OctChar) (?> _? (?&OctChar) )*) + (? 0b (?&BinChar) (?> _? (?&BinChar) )*) + (? + (?&Zero) + | (?> [-+]? (?&DecFirstChar) (?> _? (?&DecChar) )* ) + ) - (? (?&Hex) | (?&Oct) | (?&Bin) | (?&Dec)) + (? + (?> + (?&Hex) + | (?&Oct) + | (?&Bin) + | (?&Dec) + ) + ) #----------------------------------------------------------------------------- # Float #----------------------------------------------------------------------------- (? [eE] (?&Dec)) - (? [-+]? (?:inf) | (?:nan)) + (? [-+]? (?> (?:inf) | (?:nan))) (? [.] (?&Dec) ) (? - (?: - (?&Dec) + (?> + (?&Dec) - (?: - (?: (?&Fraction) (?&Exponent)? ) - | (?&Exponent) - ) + (?> + (?> (?&Fraction) (?&Exponent)? ) + | (?&Exponent) ) + ) | (?&SpecialFloat) ) @@ -167,31 +177,32 @@ our $TOML = qr{ #----------------------------------------------------------------------------- (? \x5C # leading \ - (?: + (?> [\x5C"btnfr] # escapes: \\ \" \b \t \n \f \r - | (?: u [_0-9a-fA-F]{4} ) # unicode (4 bytes) - | (?: U [_0-9a-fA-F]{8} ) # unicode (8 bytes) + | (?> u [_0-9a-fA-F]{4} ) # unicode (4 bytes) + | (?> U [_0-9a-fA-F]{8} ) # unicode (8 bytes) ) ) (? - (?: ' [^']* ') # single quoted string (no escaped chars allowed) + (?> ' [^']* ') # single quoted string (no escaped chars allowed) ) (? - (?m) - (?s) - ''' # opening triple-quote - .*? - ''' # closing triple-quote - (?-s) - (?-m) + (?> + ''' # opening triple-quote + (?> + [^'] + | '{1,2} + )*? + ''' # closing triple-quote + ) ) (? - (?: + (?> " # opening quote - (?: # escape sequences or any char except " or \ + (?> # escape sequences or any char except " or \ [^"\\] | (?&EscapeChar) )* @@ -200,24 +211,20 @@ our $TOML = qr{ ) (? - (?m) - (?s) """ # opening triple-quote - (?: + (?> [^"\\] | "{1,2} # 1-2 quotation marks | (?&EscapeChar) # escape - | (?: \\ $) + | (?: \\ (?&NLSeq)) # backslash-terminated line )*? """ # closing triple-quote - (?-s) - (?-m) ) (? - (?&MultiLineString) + (?&MultiLineString) # multi-line first or first two chars match empty basic string | (?&BasicString) - | (?&MultiLineStringLiteral) + | (?&MultiLineStringLiteral) | (?&StringLiteral) ) @@ -225,28 +232,11 @@ our $TOML = qr{ # Dates (RFC 3339) # 1985-04-12T23:20:50.52Z #----------------------------------------------------------------------------- - (? \d{4}-\d{2}-\d{2}) - - (? - (?: [-+] \d{2}:\d{2} ) - | [Z] - ) - - (? - \d{2}:\d{2}:\d{2} - (?: [.] \d+ )? - ) - - (?