[ 
https://issues.apache.org/jira/browse/GROOVY-12398?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18114007#comment-18114007
 ] 

ASF GitHub Bot commented on GROOVY-12398:
-----------------------------------------

codecov-commenter commented on PR #2921:
URL: https://github.com/apache/groovy/pull/2921#issuecomment-5624691099

   ## 
[Codecov](https://app.codecov.io/gh/apache/groovy/pull/2921?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 Report
   :x: Patch coverage is `64.70588%` with `6 lines` in your changes missing 
coverage. Please review.
   :white_check_mark: Project coverage is 71.1967%. Comparing base 
([`c52e9f7`](https://app.codecov.io/gh/apache/groovy/commit/c52e9f76d03193549a4873a8b289988cca38202f?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache))
 to head 
([`cfcc6d5`](https://app.codecov.io/gh/apache/groovy/commit/cfcc6d50fc68deed7ceea438b5124d78512217e0?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   :warning: Report is 6 commits behind head on master.
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2921?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Patch % | Lines |
   |---|---|---|
   | 
[...pache/groovy/parser/antlr4/SemanticPredicates.java](https://app.codecov.io/gh/apache/groovy/pull/2921?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fparser%2Fantlr4%2FSemanticPredicates.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2dyb292eS9wYXJzZXIvYW50bHI0L1NlbWFudGljUHJlZGljYXRlcy5qYXZh)
 | 64.7059% | [3 Missing and 3 partials :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2921?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   [![Impacted file tree 
graph](https://app.codecov.io/gh/apache/groovy/pull/2921/graphs/tree.svg?width=650&height=150&src=pr&token=1r45138NfQ&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)](https://app.codecov.io/gh/apache/groovy/pull/2921?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   
   ```diff
   @@                Coverage Diff                 @@
   ##               master      #2921        +/-   ##
   ==================================================
   - Coverage     71.2002%   71.1967%   -0.0036%     
   - Complexity      37714      37725        +11     
   ==================================================
     Files            1584       1584                
     Lines          136463     136460         -3     
     Branches        25353      25354         +1     
   ==================================================
   - Hits            97162      97155         -7     
     Misses          30540      30540                
   - Partials         8761       8765         +4     
   ```
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2921?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Coverage Δ | |
   |---|---|---|
   | 
[...pache/groovy/parser/antlr4/SemanticPredicates.java](https://app.codecov.io/gh/apache/groovy/pull/2921?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fparser%2Fantlr4%2FSemanticPredicates.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2dyb292eS9wYXJzZXIvYW50bHI0L1NlbWFudGljUHJlZGljYXRlcy5qYXZh)
 | `84.8101% <64.7059%> (+0.6638%)` | :arrow_up: |
   
   ... and [6 files with indirect coverage 
changes](https://app.codecov.io/gh/apache/groovy/pull/2921/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test 
Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, 
report on failures, and find test suite problems.
   - :package: [JS Bundle 
Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save 
yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>




> Improve lexer and parser performance
> ------------------------------------
>
>                 Key: GROOVY-12398
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12398
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Daniel Sun
>            Priority: Major
>
> The Groovy ANTLR4 grammar already uses left-recursive expressions, which is 
> the main idea of the [optimized Java 
> grammar|https://github.com/antlr/grammars-v4/tree/master/java/java]. Several 
> remaining lexer and parser costs still match patterns that grammar was 
> written to avoid.
> h3. Problem
> * Number literals are assembled from a chain of one-character fragments 
> ({{Digit}}, {{Zero}}, {{NonZeroDigit}}, ...). The invalid-octal alternative 
> also counts digits in a mid-rule action loop, which prevents DFA compilation 
> of {{IntegerLiteral}}.
> * Every identifier, including ASCII names such as {{Foo}} and {{foo}}, 
> evaluates {{Character.isUpperCase}} to choose {{CapitalizedIdentifier}} vs 
> {{Identifier}}.
> * GString and comment predicates ({{isFollowedByJavaLetterInGString}}, 
> {{isFollowedByWhiteSpaces}}) allocate a one-character {{String}} and run 
> {{Pattern.matcher}} on each lookahead.
> * {{elementValues}} is ambiguous with assignment: {{@Foo(a = 1)}} can be 
> named pairs or an assignment expression, so {{AdaptivePredict}} explores both 
> (see [antlr/grammars-v4#215|https://github.com/antlr/grammars-v4/issues/215]).
> h3. Approach
> Keep token types and language semantics unchanged.
> * Flatten number and float fragments to character classes, as in the 
> optimized Java lexer. Validate invalid octal once at the end of the 
> alternative.
> * Split ASCII identifiers on a predicate-free DFA path: uppercase {{A-Z}} 
> becomes {{CapitalizedIdentifier}}; {{a-z}}, dollar and underscore become 
> {{Identifier}}. Unicode still uses predicates.
> * Replace the regex-based predicates with direct character tests.
> * Gate {{elementValue}} with {{!isIdentifierAssign(_input)}}, the same idea 
> as Java's {{IsNotIdentifierAssign}}.
> h3. Result
> Local parse-only measurement (SLL then LL) of {{src/main/groovy}} + 
> {{src/test-resources/core}} (245 files, approximately 570k characters):
> ||Run||Best||Mean||
> |before|0.231s|0.401s|
> |after|0.146s|0.169s|
> Best run is about 1.6x faster. Mean improves more because prediction is more 
> stable after DFA warmup.
> Related: GROOVY-10454, GROOVY-9588



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to