You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
When I try to use a hole with expression-like syntax (:[foo:e]) in C code, I see the ; semicolon character included in the expression. ; isn't a valid expression token in C.
Reproducing
This link showcases some examples of it matching the ; and some ways to break it.
bit.ly/3UNAuki
Expected behavior
I expect to be able to match an expression without the trailing semicolon.
Additional context
The same is true for the comma (,) token. Though that can be part of an expression depending on context. I'm not sure if I expect comby to be smart enough to tell the difference, so I'm not sure that's included in this bug report.
The text was updated successfully, but these errors were encountered:
Hi @charles-gray! The explanation is that this really is expression-like and not strictly that expected C-expression matching. Comby is not smart enough to tell the difference. The examples that "break" that matching are what are considered non-expression tokens (spaces at the top-level, i.e., not inside (...), and comments)
Note that in many languages (and I think C is included here), a syntactic statement ending in a semicolon is considered an expression. So in the strictly C-expression matching of your examples, I would expect the behavior to always match the trailing ; (rather than never, if I am following what you would expect).
As a workaround, you can look at stripping or fine-tuning matching the ; with a regular expression matcher, since this is probably a lexical concern most of the time.
Feel free to close if this answers your question :-)
I've always assumed the ; was part of a statement, not an expression. Grabbing the first google result for a C grammar I can read, the use case I'm looking at falls under an "expression-statement", so I guess we're both right.
I guess my question then is, I see that comby supports custom language definitions. I'd love to tweak the C definition to see if I can bend it to my current use case (I've encountered this semicolon problem before!). The C definition in the comby source seems to be hard-coded in ML. I was wondering if there's a way to spit out the definition for C in JSON, or there's a reference example somewhere I can adapt?
Describe the bug
When I try to use a hole with expression-like syntax (
:[foo:e]
) in C code, I see the;
semicolon character included in the expression.;
isn't a valid expression token in C.Reproducing
This link showcases some examples of it matching the
;
and some ways to break it.bit.ly/3UNAuki
Expected behavior
I expect to be able to match an expression without the trailing semicolon.
Additional context
The same is true for the comma (
,
) token. Though that can be part of an expression depending on context. I'm not sure if I expect comby to be smart enough to tell the difference, so I'm not sure that's included in this bug report.The text was updated successfully, but these errors were encountered: