<div dir="ltr"><div dir="ltr">On Mon, Jan 13, 2020 at 5:27 PM Ilya Biryukov via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Since this popped up, I wanted to add a bit to the point made in the syntax trees doc.<div><br></div><div>Matchers for syntax trees have the following downsides:</div><div>- would incur a maintenance burden,</div><div>- will lack semantic information (at least some of it, e.g. implicit casts),</div><div>- may not be as helpful in some use-cases (syntax trees already aim to provide an alternative interface to the AST that is simpler to use for some use-cases, something that AST matchers also try to do),</div><div>- they incur both runtime and compile-time cost.</div><div><br></div><div>However, matchers are also a DSL for pattern-matching the parse tree in C++. In this sense they could also be useful for syntax trees.</div><div>Syntax trees are also much more regular than the AST and I believe matchers for syntax trees could even be auto-generated, so they can potentially be added there in the future.</div></div></div></blockquote><div><br></div><div>+1, pattern-matching on syntax trees certainly makes sense, and AST matchers are a nice DSL for that. Therefore, AST Matchers for syntax trees directly correspond to the goal in the doc by Stephen Kelly:</div><div><br></div><div>> Goal: Users should dump ASTs and write matchers which resemble source code syntax, not semantics<br></div><div><br></div><div>Dmitri</div><div><br></div></div>-- <br><div dir="ltr" class="gmail_signature">main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if<br>(j){printf("%d\n",i);}}} /*Dmitri Gribenko <<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>>*/</div></div>