* [Cocci] Searching for constants between shift operators with SmPL
@ 2018-06-17 17:09 SF Markus Elfring
2018-06-17 17:51 ` Julia Lawall
0 siblings, 1 reply; 7+ messages in thread
From: SF Markus Elfring @ 2018-06-17 17:09 UTC (permalink / raw)
To: cocci
Hello,
The following script for the semantic patch language can mark a bit of source
code also in a corresponding example.
@display@
constant C;
expression A, B;
identifier X;
type T;
@@
T X = A
<<
*C
<<
B;
int main(void)
{
unsigned int a = 2, b = 4;
unsigned long c = a << 2 << b;
}
1. I get the error message ?minus: parse error? after the addition of
a SmPL ellipsis behind the metavariable ?B?.
2. I have observed that no source code is found if I omit the metavariables ?T?
and ?X? (omission of the assignment target) in a SmPL script variant.
How do you think about to clarify these software situations any more?
Regards,
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread* [Cocci] Searching for constants between shift operators with SmPL 2018-06-17 17:09 [Cocci] Searching for constants between shift operators with SmPL SF Markus Elfring @ 2018-06-17 17:51 ` Julia Lawall [not found] ` <ae26a5be-ba96-cf08-c3cb-cced3c04f44d@users.sourceforge.net> 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2018-06-17 17:51 UTC (permalink / raw) To: cocci On Sun, 17 Jun 2018, SF Markus Elfring wrote: > Hello, > > The following script for the semantic patch language can mark a bit of source > code also in a corresponding example. > > > @display@ > constant C; > expression A, B; > identifier X; > type T; > @@ > T X = A > << > *C > << > B; > > > int main(void) > { > unsigned int a = 2, b = 4; > unsigned long c = a << 2 << b; > } > > > 1. I get the error message ?minus: parse error? after the addition of > a SmPL ellipsis behind the metavariable ?B?. You can't just put ... at random places. If you are in an expression, ... must replace a single expression. > 2. I have observed that no source code is found if I omit the metavariables ?T? > and ?X? (omission of the assignment target) in a SmPL script variant. Since I don't know anythign about the code you are applying it to, and I don't know the exact definition of the semantic patch, I can't answer the question. julia > > How do you think about to clarify these software situations any more? > > Regards, > Markus > _______________________________________________ > Cocci mailing list > Cocci at systeme.lip6.fr > https://systeme.lip6.fr/mailman/listinfo/cocci > ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <ae26a5be-ba96-cf08-c3cb-cced3c04f44d@users.sourceforge.net>]
* [Cocci] Searching for constants between shift operators with SmPL [not found] ` <ae26a5be-ba96-cf08-c3cb-cced3c04f44d@users.sourceforge.net> @ 2018-06-17 18:40 ` Julia Lawall [not found] ` <4179275b-eafb-7622-2f92-06a4b0b1b39e@users.sourceforge.net> 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2018-06-17 18:40 UTC (permalink / raw) To: cocci On Sun, 17 Jun 2018, SF Markus Elfring wrote: > > You can't just put ... at random places. > > I hope that this software aspect can be adjusted somehow. No. > > > If you are in an expression, ... must replace a single expression. > > Can it be optional at the end? I don't know what "it" refers to, but the answer is surely no. > > >> 2. I have observed that no source code is found if I omit the metavariables ?T? > >> and ?X? (omission of the assignment target) in a SmPL script variant. > > > > Since I don't know anythign about the code you are applying it to, > > Please look once more at the constructed example. > > int main(void) > { > unsigned int a = 2, b = 4; > unsigned long c = a << 2 << b; > } > > > > and I don't know the exact definition of the semantic patch, > > Can the following SmPL search approach trigger further software development considerations? > > @display@ > constant C; > expression A, B; > @@ > A > << > *C > << > B ...; > > > This SmPL script variant does not present the error message ?minus: > parse error?. That's true. You have an expression followed by ... followed by an empty statement. It will match things like: foo = x << 12 << b; test(); test(); ; It doesn't match your sample program. julia ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <4179275b-eafb-7622-2f92-06a4b0b1b39e@users.sourceforge.net>]
* [Cocci] Searching for constants between shift operators with SmPL [not found] ` <4179275b-eafb-7622-2f92-06a4b0b1b39e@users.sourceforge.net> @ 2018-06-17 19:10 ` Julia Lawall [not found] ` <a2f0f632-d84d-379c-8386-0acbace4eae0@users.sourceforge.net> 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2018-06-17 19:10 UTC (permalink / raw) To: cocci > The following file combination produces another usable search result. > > @display@ > constant C; > expression A, B; > identifier X; > type T; > @@ > T X = A > << > *C > << > B + ...; Yes, because now ... is replacing an expression. > Should anything be found in the following source code variant then? > > int main(void) > { > unsigned int a = 2, b = 4; > unsigned long c = a << 2 << b; > return c; > } No, because there is no empty statement to match the final ;. The ... matches a complete statement (in general, 0 or more complete statements). It doesn't match return c julia ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <a2f0f632-d84d-379c-8386-0acbace4eae0@users.sourceforge.net>]
* [Cocci] Searching for constants between shift operators with SmPL [not found] ` <a2f0f632-d84d-379c-8386-0acbace4eae0@users.sourceforge.net> @ 2018-06-17 19:24 ` Julia Lawall [not found] ` <7d9d3e4f-c789-538e-f4eb-beb1462d8ba0@users.sourceforge.net> 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2018-06-17 19:24 UTC (permalink / raw) To: cocci On Sun, 17 Jun 2018, SF Markus Elfring wrote: > >> Should anything be found in the following source code variant then? > >> > >> int main(void) > >> { > >> unsigned int a = 2, b = 4; > >> unsigned long c = a << 2 << b; > >> return c; > >> } > > > > No, because there is no empty statement to match the final ;. > > Where do you expect that such an empty statement would occur here? Because your rule contained ...; which is a ... followed by an empty statement. > > The ... matches a complete statement (in general, 0 or more complete statements). > > It doesn't match return c > > Is this line also a complete statement? No. return c is not a complete statement. return c; is, but then there is nothing to match the ; > > I am struggling still with the presented interpretations if the SmPL ellipsis > should match an expression or/and statements. If it is in the middle of an expression, it matches a single expression. If it is elsewhere it matches a sequence of 0 or more statements. It can also match eg a sequence of 0 or more field declarations in a structure declaration or 0 or more parameters in a function header. julia ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <7d9d3e4f-c789-538e-f4eb-beb1462d8ba0@users.sourceforge.net>]
* [Cocci] Searching for constants between shift operators with SmPL [not found] ` <7d9d3e4f-c789-538e-f4eb-beb1462d8ba0@users.sourceforge.net> @ 2018-06-17 19:53 ` Julia Lawall [not found] ` <fb10378d-dccb-73ed-ddf0-e62d1c181794@users.sourceforge.net> 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2018-06-17 19:53 UTC (permalink / raw) To: cocci On Sun, 17 Jun 2018, SF Markus Elfring wrote: > >> Where do you expect that such an empty statement would occur here? > > > > Because your rule contained ...; > > Yes. > > > > which is a ... followed by an empty statement. > > I hoped that a semicolon could be interpreted as the closing delimiter > for an assignment statement. No. That would make the parse amiguous. While a ... can match a single expression, to avoid ambiguity, such a ... cannot appear at the beginning of the expression. A way around this is to put (...); That could match an assignment statement, due to the paren isomorphism. But that won#t match return c; because return c is not an expression either. It's simply not a complete term. > > return c; is, > > My source code example contained this line. Yes, but you have to get the ... to match something and the ; to match something. If the ; matches the ; at the end of the return, then what does the ... match? julia ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <fb10378d-dccb-73ed-ddf0-e62d1c181794@users.sourceforge.net>]
* [Cocci] Searching for constants between shift operators with SmPL [not found] ` <fb10378d-dccb-73ed-ddf0-e62d1c181794@users.sourceforge.net> @ 2018-06-17 20:25 ` Julia Lawall 0 siblings, 0 replies; 7+ messages in thread From: Julia Lawall @ 2018-06-17 20:25 UTC (permalink / raw) To: cocci On Sun, 17 Jun 2018, SF Markus Elfring wrote: > >> I hoped that a semicolon could be interpreted as the closing delimiter > >> for an assignment statement. > > > > No. That would make the parse amiguous. > > I am curious on the clarification of related ambiguity concerns. ...; could match a sequence of statements followed by an empty statement or a single statement consisting of an expression followed by a ;. The parser favors the former. The former may seem less useful than the latter, but the constraints of a yacc like parser mean that the former has to be the one that is chosen. > > While a ... can match a single expression, > > I hoped that the SmPL ellipsis could handle also an optional continuation > for a computation so that I do not need to express a subsequent operator. It can't. This is not going to change. julia ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-06-17 20:25 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-17 17:09 [Cocci] Searching for constants between shift operators with SmPL SF Markus Elfring
2018-06-17 17:51 ` Julia Lawall
[not found] ` <ae26a5be-ba96-cf08-c3cb-cced3c04f44d@users.sourceforge.net>
2018-06-17 18:40 ` Julia Lawall
[not found] ` <4179275b-eafb-7622-2f92-06a4b0b1b39e@users.sourceforge.net>
2018-06-17 19:10 ` Julia Lawall
[not found] ` <a2f0f632-d84d-379c-8386-0acbace4eae0@users.sourceforge.net>
2018-06-17 19:24 ` Julia Lawall
[not found] ` <7d9d3e4f-c789-538e-f4eb-beb1462d8ba0@users.sourceforge.net>
2018-06-17 19:53 ` Julia Lawall
[not found] ` <fb10378d-dccb-73ed-ddf0-e62d1c181794@users.sourceforge.net>
2018-06-17 20:25 ` Julia Lawall
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.