Skip to content

Conversation

@ehwan
Copy link
Owner

@ehwan ehwan commented Oct 2, 2025

Use empty stack instead of terminal symbol stack in the parser data stack, if certain terminal symbol's data was not used in any reduce action.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @ehwan, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request implements a significant optimization in how the parser handles terminal symbol data. Previously, data for all terminal symbols was pushed onto the parser's data stack, regardless of whether it was actually used in a subsequent reduce action. This change introduces a mechanism to detect unused terminal data and, in such cases, pushes an Empty tag onto the stack instead. This reduces memory overhead and improves performance by avoiding unnecessary data allocations and manipulations, particularly in generated parser code.

Highlights

  • Optimized Terminal Data Handling: Introduced a data_used flag for terminal classes to track whether their associated data is consumed in any reduce action, preventing unnecessary data pushes.
  • Conditional Data Pushing: The parser now conditionally pushes terminal data onto the stack; if data_used is false, an Empty tag is pushed instead of the actual terminal data, reducing memory overhead.
  • Refined Parser Generation: Updated the grammar processing and parser generation logic to correctly determine and apply the data_used flag, leading to more efficient data stack management in generated parsers.
  • Reduced Stack Operations: Numerous changes in generated parser files reflect this optimization by replacing terminal data pushes with Empty tags and removing corresponding data truncations.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a valuable optimization by avoiding pushing terminal symbol data to the parser stack when it's not utilized in any reduce actions. This is achieved by adding a data_used flag to TerminalClassDefinition, which is calculated by inspecting all reduce actions. The logic appears sound and is correctly applied to control the data pushing behavior during shift operations. The changes are well-implemented, and the resulting modifications in the generated parser code are consistent with this optimization. I have one minor suggestion to fix a typo in a comment.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@ehwan ehwan merged commit dcd1189 into main Oct 2, 2025
1 check passed
@ehwan ehwan deleted the term_data_used branch October 2, 2025 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants