-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize Lexer comment reading #494
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This pull request changes the `StringScanner#getch` to read one character at a time and optimizes Lexer's comment reading. The effect can be seen with long comments. ```yacc /* * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis hendrerit, mi non eleifend aliquet, arcu lectus vulputate est, in suscipit lacus nibh a ligula. Nulla non mi sit amet lectus malesuada elementum et sed ex. Nam porttitor ut urna id consequat. Sed neque ex, feugiat ut convallis sit amet, laoreet vitae sapien. Aliquam vestibulum elit mauris, eu ornare leo consectetur nec. Suspendisse bibendum blandit pretium. Suspendisse eget tortor non libero sodales aliquam id vel risus. * * Maecenas ac cursus velit. Sed vehicula nisl mattis eros malesuada, eu volutpat lorem volutpat. Mauris et metus venenatis, facilisis tortor eu, tempus dui. Quisque vel dui eu felis elementum gravida. Proin sed eros odio. Curabitur porttitor maximus tellus nec luctus. Vestibulum at feugiat sapien, at pharetra orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer iaculis enim vitae nisi commodo lacinia. Proin sapien erat, convallis aliquet orci eu, aliquet dapibus massa. Donec ultricies, sapien non pellentesque elementum, metus odio hendrerit urna, sed interdum metus risus sit amet ligula. In at feugiat dolor, non egestas leo. Quisque augue orci, hendrerit sed ipsum ut, tristique aliquet mauris. Praesent non lectus scelerisque, facilisis ante at, eleifend sapien. * * Nam dignissim suscipit nibh at dictum. Quisque ac sagittis nulla. Etiam at ipsum eget massa viverra egestas. Suspendisse fermentum iaculis rhoncus. Suspendisse non odio a arcu porta pretium semper sed ex. Quisque facilisis lorem tortor, ut efficitur diam aliquet eu. Nam ac turpis ut neque finibus varius et at diam. Cras mi ligula, pharetra eget purus nec, luctus malesuada sem. Praesent eget convallis tellus. Sed non euismod diam, vulputate porttitor metus. Sed ante lectus, venenatis id tortor in, vehicula euismod magna. In mattis ullamcorper arcu, nec malesuada elit consectetur et. Aliquam vitae tincidunt sapien. Aliquam eu congue tortor, sed laoreet tellus. Sed id elementum lorem. * * Quisque luctus, quam at volutpat aliquet, massa ex ultrices quam, rutrum eleifend sem odio nec lectus. Morbi id semper leo. Sed dapibus, sapien at tincidunt scelerisque, augue ex iaculis elit, non rutrum nisl turpis id lacus. In posuere tortor id mattis lobortis. Pellentesque eget quam ut quam luctus bibendum quis eget justo. Suspendisse mollis, quam vitae volutpat ornare, lacus magna elementum arcu, vitae tristique diam urna mollis nulla. Nunc ullamcorper blandit gravida. Duis non enim risus. Nunc auctor nibh non ultricies maximus. Duis tempor venenatis sapien id fermentum. Nulla vel arcu eu eros tristique sagittis. Vestibulum quis leo orci. * * Proin finibus molestie nunc eu dapibus. Mauris non placerat purus. Aliquam a porttitor dolor. Nam elit dui, convallis sit amet ante eu, lacinia posuere leo. Suspendisse vel tortor tellus. Aenean posuere maximus sapien sit amet feugiat. Nulla viverra auctor est, vitae dignissim lacus finibus sit amet. Phasellus bibendum velit id nunc ultrices placerat. Proin et egestas nisl. Sed ultricies sed dolor eu vehicula. Quisque in egestas nibh, sed scelerisque odio. Nunc aliquam rhoncus mauris, cursus mattis turpis pharetra rhoncus. Sed eget sapien vitae orci fringilla pretium. Nam nec ipsum id lectus pretium lobortis non ac justo. Mauris et dolor sed mauris consectetur volutpat in eget urna. * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis hendrerit, mi non eleifend aliquet, arcu lectus vulputate est, in suscipit lacus nibh a ligula. Nulla non mi sit amet lectus malesuada elementum et sed ex. Nam porttitor ut urna id consequat. Sed neque ex, feugiat ut convallis sit amet, laoreet vitae sapien. Aliquam vestibulum elit mauris, eu ornare leo consectetur nec. Suspendisse bibendum blandit pretium. Suspendisse eget tortor non libero sodales aliquam id vel risus. * * Maecenas ac cursus velit. Sed vehicula nisl mattis eros malesuada, eu volutpat lorem volutpat. Mauris et metus venenatis, facilisis tortor eu, tempus dui. Quisque vel dui eu felis elementum gravida. Proin sed eros odio. Curabitur porttitor maximus tellus nec luctus. Vestibulum at feugiat sapien, at pharetra orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer iaculis enim vitae nisi commodo lacinia. Proin sapien erat, convallis aliquet orci eu, aliquet dapibus massa. Donec ultricies, sapien non pellentesque elementum, metus odio hendrerit urna, sed interdum metus risus sit amet ligula. In at feugiat dolor, non egestas leo. Quisque augue orci, hendrerit sed ipsum ut, tristique aliquet mauris. Praesent non lectus scelerisque, facilisis ante at, eleifend sapien. * * Nam dignissim suscipit nibh at dictum. Quisque ac sagittis nulla. Etiam at ipsum eget massa viverra egestas. Suspendisse fermentum iaculis rhoncus. Suspendisse non odio a arcu porta pretium semper sed ex. Quisque facilisis lorem tortor, ut efficitur diam aliquet eu. Nam ac turpis ut neque finibus varius et at diam. Cras mi ligula, pharetra eget purus nec, luctus malesuada sem. Praesent eget convallis tellus. Sed non euismod diam, vulputate porttitor metus. Sed ante lectus, venenatis id tortor in, vehicula euismod magna. In mattis ullamcorper arcu, nec malesuada elit consectetur et. Aliquam vitae tincidunt sapien. Aliquam eu congue tortor, sed laoreet tellus. Sed id elementum lorem. * * Quisque luctus, quam at volutpat aliquet, massa ex ultrices quam, rutrum eleifend sem odio nec lectus. Morbi id semper leo. Sed dapibus, sapien at tincidunt scelerisque, augue ex iaculis elit, non rutrum nisl turpis id lacus. In posuere tortor id mattis lobortis. Pellentesque eget quam ut quam luctus bibendum quis eget justo. Suspendisse mollis, quam vitae volutpat ornare, lacus magna elementum arcu, vitae tristique diam urna mollis nulla. Nunc ullamcorper blandit gravida. Duis non enim risus. Nunc auctor nibh non ultricies maximus. Duis tempor venenatis sapien id fermentum. Nulla vel arcu eu eros tristique sagittis. Vestibulum quis leo orci. * * Proin finibus molestie nunc eu dapibus. Mauris non placerat purus. Aliquam a porttitor dolor. Nam elit dui, convallis sit amet ante eu, lacinia posuere leo. Suspendisse vel tortor tellus. Aenean posuere maximus sapien sit amet feugiat. Nulla viverra auctor est, vitae dignissim lacus finibus sit amet. Phasellus bibendum velit id nunc ultrices placerat. Proin et egestas nisl. Sed ultricies sed dolor eu vehicula. Quisque in egestas nibh, sed scelerisque odio. Nunc aliquam rhoncus mauris, cursus mattis turpis pharetra rhoncus. Sed eget sapien vitae orci fringilla pretium. Nam nec ipsum id lectus pretium lobortis non ac justo. Mauris et dolor sed mauris consectetur volutpat in eget urna. */ %{ %} %union { int i; } %token <i> number %% program : number ; %% ``` Before ``` ❯ exe/lrama --trace=time -o long_comment.tmp.c --header=long_comment.tmp.h long_comment.y parse 0.00299 s parse 0.00317 s compute_lr0_states 0.00005 s compute_direct_read_sets 0.00002 s compute_reads_relation 0.00000 s compute_read_sets 0.00001 s compute_includes_relation 0.00000 s compute_lookback_relation 0.00001 s compute_follow_sets 0.00001 s compute_look_ahead_sets 0.00001 s compute_conflicts 0.00001 s compute_default_reduction 0.00001 s compute_yydefact 0.00002 s compute_yydefgoto 0.00001 s sort_actions 0.00000 s compute_packed_table 0.00001 s render 0.00725 s ``` After ``` ❯ exe/lrama --trace=time -o long_comment.tmp.c --header=long_comment.tmp.h long_comment.y parse 0.00040 s parse 0.00311 s compute_lr0_states 0.00004 s compute_direct_read_sets 0.00001 s compute_reads_relation 0.00000 s compute_read_sets 0.00001 s compute_includes_relation 0.00000 s compute_lookback_relation 0.00000 s compute_follow_sets 0.00000 s compute_look_ahead_sets 0.00001 s compute_conflicts 0.00001 s compute_default_reduction 0.00001 s compute_yydefact 0.00002 s compute_yydefgoto 0.00001 s sort_actions 0.00000 s compute_packed_table 0.00001 s render 0.00614 s ```
yui-knk
approved these changes
Dec 31, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request changes the
StringScanner#getch
to read one character at a time and optimizes Lexer's comment reading.The effect is seen when there are many comments.
Before
After