From: Alan Mackenzie <acm@muc.de>
To: Robert Weiner <rswgnu@gmail.com>
Cc: Robert Weiner <rsw@gnu.org>,
Hank Greenburg <hank.greenburg@protonmail.com>,
Mats Lidell <mats.lidell@lidells.se>,
61436-done@debbugs.gnu.org, acm@muc.de,
Eli Zaretskii <eliz@gnu.org>,
Jens Schmidt <jschmidt4gnu@vodafonemail.de>
Subject: bug#61436: Emacs Freezing With Java Files
Date: Mon, 16 Oct 2023 14:05:20 +0000 [thread overview]
Message-ID: <ZS1DIGWbZCTGKkXQ@ACM> (raw)
In-Reply-To: <CA+OMD9iMzSxj36xHOw993oo+YcmenUwR8dgzsf_jWUgwjAbHDg@mail.gmail.com>
Hello, Bob.
On Sun, Oct 15, 2023 at 06:20:15 -0400, Robert Weiner wrote:
> Hi Alan:
> Would be great if you can improve those two regexps. The only
> requirement is that they be able to recognize all defuns in the two
> languages as best a regexp can, so that the whole defun can be
> selected based on finding the opening brace regardless of coding
> style.
So far, I've only looked at the Java regexp. It had some serious
deficiencies, notably:
(i) It used "\\s-" (space syntax) a lot. This fails to mach \n, which in
Java mode has comment-end syntax.
(ii) The bit for the parenthesis expression was in an optional part of
the regexp with the result that it would match "almost anything" rather
than a defun start.
In the following regexp these faults are fixed. Additionally, I've
included more modifiers (things like private, volatile) which Java seems
to have gathered over the years. I've also attempted to match generic
functions. I don't know how well this will work out.
Here's the regexp. Would people please try it out and let me know how
well it works.
(defconst java-defun-prompt-regexp
(let ((space* "[ \t\n\r\f]*")
(space+ "[ \t\n\r\f]+")
(modifier*
(concat "\\(?:"
(regexp-opt '("abstract" "const" "default" "final" "native"
"private" "protected" "public" "static"
"strictfp" "synchronized" "threadsafe"
"transient" "volatile")
'words) ; Compatible with XEmacs
space+ "\\)*"))
(ids-with-dots "[_$a-zA-Z][_$.a-zA-Z0-9]*")
(ids-with-dot-\[\] "[[_$a-zA-Z][][_$.a-zA-Z0-9]*")
(paren-exp "([^);{}]*)")
(generic-exp "<[^(){};]*>"))
(concat "^[ \t]*"
modifier*
"\\(?:" generic-exp space* "\\)?"
ids-with-dot-\[\] space+ ; first part of type
"\\(?:" ids-with-dot-\[\] space+ "\\)?" ; optional second part of type.
"\\(?:[_a-zA-Z][^][ \t:;.,{}()=<>]*" ; defun name
"\\|" ids-with-dot*
"\\)" space*
paren-exp
"\\(?:" space* "]\\)*" ; What's this for?
"\\(?:" space* "\\<throws\\>" space* ids-with-dot-\[\]s*
"\\(?:," space* ids-with-dot-\[\]s* "\\)*"
"\\)?"
space*)))
> Thanks.
> -- Bob
> > On Oct 14, 2023, at 8:41 PM, Alan Mackenzie <acm@muc.de> wrote:
[ .... ]
> > Mats, I'm willing to work on that regular expression, and also the one
> > for C++. As I mentioned earlier, I've got some tools which work on
> > regexps, in particular pp-regexp, which prints a regexp more readably on
> > several lines, and fix-re, which rewrites a regexp when it is
> > ill-conditioned in certain ways.
> > I foresee reverse engineering the regexps into more readable forms built
> > up by concatenating basic blocks. For example for the java regexp I
> > would define
> > (defconst id "[a-zA-Z][][_$.a-zA-Z0-9]*")
> > , and use this id in a largish concat form.
> > I'm also willing to share pp-regexp and fix-re with you(r team), if that
> > might help, on the understanding that neither is of release quality.
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2023-10-16 14:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-11 18:16 bug#61436: Emacs Freezing With Java Files Hank Greenburg via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-02-12 0:24 ` Hank Greenburg via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-02-12 6:30 ` Eli Zaretskii
2023-02-12 16:52 ` Hank Greenburg via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-02-12 17:05 ` Eli Zaretskii
2023-02-12 17:11 ` Hank Greenburg via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-09 20:26 ` Jens Schmidt via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-10 20:58 ` Jens Schmidt via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-11 7:28 ` Mats Lidell via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-11 10:17 ` Robert Weiner
2023-10-11 19:38 ` Jens Schmidt via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-11 20:07 ` Robert Weiner
2023-10-11 21:43 ` Mats Lidell via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-11 22:03 ` Alan Mackenzie
2023-10-12 19:58 ` Jens Schmidt via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-13 12:41 ` Alan Mackenzie
2023-10-13 18:02 ` Mats Lidell via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-13 20:42 ` Jens Schmidt via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14 19:41 ` Alan Mackenzie
2023-10-15 10:20 ` Robert Weiner
2023-10-16 14:05 ` Alan Mackenzie [this message]
2023-10-16 19:10 ` Robert Weiner
2023-10-21 22:14 ` Mats Lidell via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-22 14:15 ` Alan Mackenzie
2023-10-22 17:17 ` Mats Lidell via Bug reports for GNU Emacs, the Swiss army knife of text editors
[not found] ` <CA+OMD9hgM_NX7GmeW8ph5fBW6SkFGogf4W4JOO5o62H3X15WHw@mail.gmail.com>
2024-04-17 13:22 ` Alan Mackenzie
[not found] ` <Zh_JagP5xaaXJMOo@ACM>
2024-04-17 18:50 ` Alan Mackenzie
2024-04-17 22:24 ` Robert Weiner
2024-04-19 2:19 ` Robert Weiner
2024-04-19 4:40 ` Robert Weiner
2024-04-19 15:59 ` Alan Mackenzie
2024-04-19 2:58 ` Robert Weiner
2023-02-12 6:00 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZS1DIGWbZCTGKkXQ@ACM \
--to=acm@muc.de \
--cc=61436-done@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=hank.greenburg@protonmail.com \
--cc=jschmidt4gnu@vodafonemail.de \
--cc=mats.lidell@lidells.se \
--cc=rsw@gnu.org \
--cc=rswgnu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).