<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace;font-size:small"><br></div><div class="gmail_quote"><div dir="ltr"><div style="font-family:'courier new',monospace;font-size:small">Thanks for your help. It seems that I've found most answers from the source code. :lol:</div><div class="gmail_extra"><br clear="all"><div><div>     Best regards,<br>Xiaofeng Yang</div></div>
<br><div class="gmail_quote"><div><div class="h5">2014-12-14 20:09 GMT+08:00 Julien Fischer <span dir="ltr"><<a href="mailto:jfischer@opturion.com" target="_blank">jfischer@opturion.com</a>></span>:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
Hi,<span><br>
<br>
On Sat, 13 Dec 2014, Xiaofeng Yang wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I have confused by the Mercury Reference Manual (14.01.1). I found it seems<br>
not so up-to-date with the implementation. Now I have some questions about<br>
string literals and name tokens need to be helped.<br>
<br>
Do the differences between a string literal and a quoted name is only<br>
    * quoted by single/double quotes<br>
    * '' can appears in a quoted name (but not a string literal), whereas "" can appears in a string literal (but not a quoted name)<br>
?<br>
</blockquote>
<br></span>
Almost, except that:<br>
<br>
'' _can_ appear in a string literal, it just means two single quote characters<br>
unlike in a quoted name where it represents _one_ single quote character.<br>
<br>
Likewise, "" in a quoted name represents two double-quote characters and in<br>
a string literal represents one double-quote character.<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I found some usage not be mentioned in the refman, e.g.<br>
<br>
I write "\\" but it interpreted as \\, this is not mentioned.<br>
</blockquote>
<br></span>
I'm not sure what you mean by "interpreted" there.  The value given by the<br>
string literal "\\" is a string containing a single backslash character.<br>
It may be that you are trying to print this string  it out using the predicate<br>
io.write.  If so, note what the documentation for that predicate says:<br>
<br>
        Strings and characters are always printed out in quotes, using backslash<br>
        escapes if necessary.<br>
<br>
If you just want to print out the value of the string literal instead of its<br>
syntactic representation use io.write_string or io.print instead.<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I write "\" but it errors while compiling, so how the backslash works?<br></blockquote></span></blockquote><div><br></div></div></div><div><div style="font-family:'courier new',monospace;font-size:small">​Yes, this is my mistake.​</div><br></div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
</blockquote>
<br></span>
That literal is missing a terminating double-quote delimiter.  The escaped<br>
double-quote does not act as one.  It should be:<br>
<br>
    "\""<br></blockquote><div><br></div><div><br></div></span><div><div style="font-family:'courier new',monospace;font-size:small">refman: "Strings may also contain backslash escapes. ‘\a’ stands for “alert” (a beep character), ‘\b’ for backspace, ‘\r’ for carriage-return, ‘\f’ for form-feed, ‘\t’ for tab, ‘\n’ for newline, ‘\v’ for vertical-tab. An escaped backslash, single-quote, or double-quote stands for itself."</div><div style="font-family:'courier new',monospace;font-size:small"><br></div><div style="font-family:'courier new',monospace;font-size:small"><br></div><div style="font-family:'courier new',monospace;font-size:small">I found that \` is also ​ a backslash escape, but not mentioned in the refman.</div><br></div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
(Which is no different to the way C, C++, C#, Java and many other programming<br>
languages handle the same thing.)<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I write "\143\" and it is interpreted as "c", this is what mentioned in<br>
refman 2.3. But I write "\143" is also interpreted as "c",<br>
</blockquote>
<br></span>
<div style="font-family:'courier new',monospace;font-size:small;display:inline">​​</div>It's a (deliberate) bug in the Mercury implementation.  Unterminated octal<br>
escapes like "\143" should not be allowed, as the reference manual says, but<br>
the implementation currently does allow them because when the lexer was<br>
originally written compatibility with NU-Prolog was required and NU-Prolog<br>
apparently had a bug that lead it to accept unterminated octal escapes.<br>
<br>
This should have been fixed a long time ago (since compatibility with NU-Prolog<br>
isn't an issue these days), but I guess the issue hasn't arisen until now<br>
because octal escapes are so rarely used.  I will fix the lexer up so that<br>
it rejects unterminated octal escapes.</blockquote><div><br></div></span><div><div style="font-family:'courier new',monospace;font-size:small">​This sounds a good news.​</div><br></div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
whereas "\43" will interpreted as "#", these are what not mentioned in the refman.<br>
</blockquote>
<br></span>
Same issue as above.<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I found the max value for the rule "\x....\" is \xfffff\, and the max value<br>
for the rule "\....\" is \x777777\, this is what not mentioned in the refman.<br>
</blockquote>
<br></span>
<div style="font-family:'courier new',monospace;font-size:small;display:inline">​​</div>The intention is that you should get an error for any character code that lies<br>
outside the Unicode range (0x0 - 0x10ffff).  I'll add something to the reference<br>
manual about this.<br>
<br></blockquote><div><br></div></span><div><div style="font-family:'courier new',monospace;font-size:small">I found that ​0x0 is not a​llowed in the form of \x....\, \...\, \u.... and \U........, but this is not mentioned in the refman. </div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Cheers,<br>
Julien.</blockquote></div></div></div>
</div></div>