<html>
<head></head>
<body>
<p>Thank you all for your answers! I haven't realized in that possibility, but it is definitely what I was looking for.</p>
<p>Csaba, sorry for the way of expressing myself,<span class="hps"> <span class="hps">but I wasn't</span> <span class="hps">entirely</span> <span class="hps">familiar with</span> <span class="hps">these terms, but now they are much clearer. <br /></span></span></p>
<p><span lang="en"><span class="hps">Thanks again,</span></span></p>
<p><span lang="en"><span class="hps">Pedro.<br /></span></span></p>
<br/>
<div><em>El día 01 mar 2014 13:22, Csaba Raduly <rcsaba@gmail.com> escribió:</em></div><blockquote class="replyBlock" style="border-left: 2px solid #000083; margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><p>Hi Pedro,</p>
<p>On Thu, Feb 27, 2014 at 12:36 PM, Pedro Delgado Perez  wrote:</p>
<blockquote class="replyBlock" style="border-left: 2px solid #000083; margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><p>Hi,</p>
<p>I have a sentence like this:</p>
<p>method( b )    ,        a = 3     ,        b++;</p>
<p>This sentence is a statement composed of three substatements. What I need is<br/>
to difference those three substatements which are between commas to save<br/>
them in a list:</p>
<p>Statement 1 -> method( b )<br/>
Statement 2->  a = 3<br/>
Statement 3 -> b++</p>
<p>So I tried using the "child_iterator" in the class Stmt, which I though it<br/>
would be easy.<br/>
In the first iteration, the statement is subdivided in:</p>
<p>[method( b )  ,  a = 3]    and     [b++;]</p>
<p>The first sentence is then subdivided again in:</p>
<p>[method( b )]   and    [a = 3]</p>
<p>The problem is that  I don't know when I should stop the division because,<br/>
now, the first statement is divided again to my surprise, taking the<br/>
argument "b" as a new statement. Thus, I'm getting more than three<br/>
statements, what is a major issue in my case.</p>
<p>Is there any way to count the number of statements separated by commas?</p>
</blockquote><p>"You keep using that word. I do not think it means what you think it means."</p>
<p>In C++ the word "statement" has a precise meaning. There is no such<br/>
thing in C++ as "substatement".</p>
<p>Your "sentence" is _one_ statement. It contains an expression (whose<br/>
result you're throwing away, but that's normal).</p>
<p>There is no such thing as "statements separated by commas". There's<br/>
not even "expressions separated by commas".<br/>
You have been tricked by the fact that evaluation of comma expressions<br/>
proceeds from left to right, into believing that the expression is<br/>
represented as a linear data structure. It's not. It's a tree.<br/>
Here's the output of clang -cc1 -ast-dump:</p>
<p>    `-BinaryOperator 0x6000c4d78 <line:9:3, col:47> 'int' ','<br/>
      |-BinaryOperator 0x6000c4d08 <col:3, col:31> 'int' ','<br/>
      | |-CallExpr 0x6000c4c50 <col:3, col:13> 'void'<br/>
      | | |-ImplicitCastExpr 0x6000c4c38 <col:3> 'void (*)(int)'<br/>
<FunctionToPointerDecay><br/>
      | | | `-DeclRefExpr 0x6000c4bc0 <col:3> 'void (int)' Function<br/>
0x60007e640 'method' 'void (int)'<br/>
      | | `-ImplicitCastExpr 0x6000c4c80 <col:11> 'int' <LValueToRValue><br/>
      | |   `-DeclRefExpr 0x6000c4be8 <col:11> 'int' lvalue Var<br/>
0x60007e8f0 'b' 'int'<br/>
      | `-BinaryOperator 0x6000c4ce0 <col:27, col:31> 'int' '='<br/>
      |   |-DeclRefExpr 0x6000c4c98 <col:27> 'int' lvalue Var<br/>
0x60007e880 'a' 'int'<br/>
      |   `-IntegerLiteral 0x6000c4cc0 <col:31> 'int' 3<br/>
      `-UnaryOperator 0x6000c4d58 <col:46, col:47> 'int' postfix '++'<br/>
        `-DeclRefExpr 0x6000c4d30 <col:46> 'int' lvalue Var<br/>
0x60007e8f0 'b' 'int'</p>
<p>What you have is a binary expression: a comma operator and its two<br/>
operands. One of the operands is a binary expression: a comma operator<br/>
and its operands.</p>
<p>You could perhaps try to navigate this tree and stop if the<br/>
BinaryOperator is not a ',' .</p>
<br/>
<p>Csaba<br/>
-- <br/>
GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++<br/>
The Tao of math: The numbers you can count are not the real numbers.<br/>
Life is complex, with real and imaginary parts.<br/>
"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds<br/>
"People disagree with me. I just ignore them." -- Linus Torvalds</p>
</blockquote>
</body>
</html>