* <xus> quoted string with Unicode escapes
* <xusend> end of a quoted string with Unicode escapes, UESCAPE can follow
* <xeu> Unicode surrogate pair in extended quoted string
+ *
+ * Remember to add an <<EOF>> case whenever you add a new exclusive state!
+ * The default one is probably not the right thing.
*/
%x xb
<xus>{quotefail} {
/* throw back all but the quote */
yyless(1);
- /* handle possible UESCAPE in xusend mode */
+ /* xusend state looks for possible UESCAPE */
BEGIN(xusend);
}
-<xusend>{whitespace}
+<xusend>{whitespace} { /* stay in xusend state over whitespace */ }
<xusend>{other} |
-<xusend>{xustop1} {
+<xusend>{xustop1} |
+<xusend><<EOF>> {
/* no UESCAPE after the quote, throw back everything */
yyless(0);
BEGIN(INITIAL);
}
<xui>{dquote} {
yyless(1);
- /* handle possible UESCAPE in xuiend mode */
+ /* xuiend state looks for possible UESCAPE */
BEGIN(xuiend);
}
-<xuiend>{whitespace} { }
+<xuiend>{whitespace} { /* stay in xuiend state over whitespace */ }
<xuiend>{other} |
-<xuiend>{xustop1} {
+<xuiend>{xustop1} |
+<xuiend><<EOF>> {
/* no UESCAPE after the quote, throw back everything */
char *ident;
* <xe> extended quoted strings (support backslash escape sequences)
* <xdolq> $foo$ quoted strings
* <xui> quoted identifier with Unicode escapes
- * <xuiend> end of a quoted identifier with Unicode escapes, UESCAPE can follow * <xus> quoted string with Unicode escapes
+ * <xuiend> end of a quoted identifier with Unicode escapes, UESCAPE can follow
+ * <xus> quoted string with Unicode escapes
* <xusend> end of a quoted string with Unicode escapes, UESCAPE can follow
*
* Note: we intentionally don't mimic the backend's <xeu> state; we have