<div dir="ltr"><div><div><div><div><div><div>I am unknown to all the stuff happening in and around LLVM, as i am interested in the project but had not time to dig in, yet. Just reading here and there a bit. But i wanted to share my 2 cents on the Lexer topic. I have written multiple lexer/parser for private purpose and recently one for our product to compile Mathematical expressions into an internal format for evaluation.<br><br></div>So far i usually write a Lexer which does the tokenizing on very basic rules. What is a number, what is a single symbolor a whole Identifier, and what to skip(like spaces). Each token has metadata like relative offset to the previous one. A Parser on top uses the lexer to process the Tokens. My approach of storing the relative offsets allows to regroup tokens to single symbols respecting whitespaces at a later time.<br><br></div>Let's say we have(without quotes ofcourse) <br>"2 * 3"<br></div>The lexer always produces 3 tokens, 2 with the content and identification for a numeraical value(for 2 and 3) and one for an operator token. I can now either go for it and use these tokens to process as part of a mathematical evaluation or reconstruct the original stream. However this means that the stream below:<br></div>"(foo)"<br></div>is always lexed to 3 tokens (2 for the brackets and one for the identifier). The Parser then has the context on how to process these tokens.<br><br></div>My example has some drawbacks. By always splitting into the basic tokens and possibly regrouping you'll need more rellocations for processing. And therefore losing performance. However i find this approach simple to test and write tests for.<br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-01-31 10:47 GMT+01:00 George Rimar via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr" style="font-size:12pt;color:#000000;background-color:#ffffff;font-family:Calibri,Arial,Helvetica,sans-serif"><span class="">
<p><span style="color:rgb(33,33,33);font-size:12pt">>> I have a question also. You added </span><span style="color:rgb(33,33,33);font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">-m
 elf_i386 </span><span style="color:rgb(33,33,33);font-size:12pt">to workaround emulation conflict issue in LLD, do you know</span><br>
</p>
</span><div style="color:rgb(33,33,33)">
<div><span class="">
<div>
<div>>> does output produced by BFD boot fine after that change ?</div>
>Doesn't seem to affect BFD at all.</div>
<div><br>
</div>
</span><div>Thanks !<br>
</div>
<div><br>
</div>
<div>​George.<br>
</div>
</div>
</div>
</div>

<br>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>