<div dir="ltr"><div>The lexer file would not become smaller if you had some syntax for saying you wanted a case independent match. The way the resulting scanner works means that you would basically get the same set of lexer rules. This a result of the lexer being completely deterministic. It's all in the dragon book. :-)<br><br></div>Robert<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 4 June 2015 at 15:33, Knut Nesheim <span dir="ltr"><<a href="mailto:knutin@gmail.com" target="_blank">knutin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">At the moment I'm using the first solution you propose (and proposed<br>
by Joel in the old post). It works out fine. It's cumbersome to write<br>
and the lexer file becomes huge in my case. The generated module is 8k<br>
lines of code. Otherwise, I don't have any problems.<br>
<br>
What I would like to do in a perfect world is to use the "i" flag<br>
found in some regex implementations:<br>
<br>
    /select/i     : {token, {select, TokenLine, TokenChars}}<br>
<br>
Regards<br>
<span class="HOEnZb"><font color="#888888">Knut<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Thu, Jun 4, 2015 at 8:15 PM, Jesper Louis Andersen<br>
<<a href="mailto:jesper.louis.andersen@gmail.com">jesper.louis.andersen@gmail.com</a>> wrote:<br>
><br>
> On Thu, Jun 4, 2015 at 7:06 PM, Knut Nesheim <<a href="mailto:knutin@gmail.com">knutin@gmail.com</a>> wrote:<br>
>><br>
>> For my use case "select", "SELECT", "SeLeCt" means exactly the<br>
>> same.<br>
><br>
><br>
> I'm not sure I understand this:<br>
><br>
> [jlouis@lady-of-pain ~]$ cat z.xrl<br>
> %% Test<br>
><br>
> Definitions.<br>
><br>
> Rules.<br>
><br>
> [sS][eE][lL][eE][cC][tT] : {token, select}.<br>
><br>
> Erlang code.<br>
><br>
> %% Nothing<br>
><br>
> in an erl shell:<br>
><br>
> 4> leex:file("z").<br>
> {ok,"./z.erl"}<br>
> 6> c("z.erl").<br>
> {ok,z}<br>
> 9> [z:string(Str) || Str <- ["select", "SELECT", "SeLeCt"]].<br>
> [{ok,[select],1},{ok,[select],1},{ok,[select],1}]<br>
><br>
> Note how the token parses as the same thing.<br>
><br>
> [sS][eE][lL][eE][cC][tT] : {token, {identifier,<br>
> string:to_lower(TokenChars)}}.<br>
><br>
> should also work, if select is not a keyword, but you want to handle it as<br>
> an identifier.<br>
><br>
> some Regex engines provides convenience notation for [sS], [eE] etc, but it<br>
> tends to be rare enough for keywords that you skip it. Another path through<br>
> the game is the following age-old lexer hack:<br>
><br>
> [jlouis@lady-of-pain ~]$ cat y.xrl<br>
> %% Test<br>
><br>
> Definitions.<br>
><br>
> ALPHA = [a-zA-Z]<br>
><br>
> Rules.<br>
><br>
> {ALPHA}* : {token, analyze_alpha(string:to_lower(TokenChars))}.<br>
><br>
> Erlang code.<br>
><br>
> %% Match keywords, and if no keyword matches, regard the token as an<br>
> identifier<br>
> analyze_alpha("select") -> select;<br>
> analyze_alpha(Otherwise) -> {identifier, Otherwise}.<br>
><br>
> 13> leex:file("y").<br>
> {ok,"./y.erl"}<br>
> 14> c("y.erl").<br>
> {ok,y}<br>
> 15> [y:string(Str) || Str <- ["select", "SELECT", "SeLeCt"]].<br>
> [{ok,[select],1},{ok,[select],1},{ok,[select],1}]<br>
><br>
> Do any of these work for you?<br>
><br>
> --<br>
> J.<br>
</div></div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>