Warning: session_start(): open(/var/lib/php/sessions/sess_8hm63d3bv8fkmreh4o5g2hk4go, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
p-exp {
assertEqualsVerbose(true, checkNTokenHygiene("{a b} {c d}"));
assertEqualsVerbose(false, checkNTokenHygiene("a b} {c d}"));
assertEqualsVerbose(false, checkNTokenHygiene("{a b} {c d"));
assertEqualsVerbose(true, checkNTokenHygiene("a b c d"));
assertEqualsVerbose(false, checkNTokenHygiene("c d}"));
assertEqualsVerbose(false, checkNTokenHygiene("{a b"));
}
sbool checkNTokenHygiene(S s) {
L tok = javaTokNPunctuation(s);
if (l(tok) == 1) true;
ret print("checkForward " + sfu(tok) + ": ", checkForward(tok))
&& print("checkBackward " + sfu(tok) + ": ", checkBackward(tok));
}
sbool checkForward(L tok) {
int level = 0;
for (int i = 0; i < l(tok)-1; i += 2) {
S t = tok.get(i);
if (i == 0) t = substring(t, lastIndexOf(t, '}')+1);
print("t=" + quote(t));
for (char c : characters(t))
if (c == '{') ++level;
else if (c == '}') level = max(0, level-1);
}
if (level == 0) true;
for (char c : characters(last(tok)))
if (c == '}') if (--level == 0) true;
false;
}
sbool checkBackward(L tok) {
int level = 0;
for (int i = l(tok)-1; i > 0; i -= 2) {
S t = tok.get(i);
if (i == l(tok)-1) t = substring(t, 0, smartIndexOf(t, '{'));
for (char c : reversedCharacters(print("tok", tok.get(i))))
if (c == '}') ++level;
else if (c == '{') level = max(0, level-1);
}
print("level at beginning: " + level);
if (level == 0) true;
for (char c : reversedCharacters(first(tok)))
if (c == '{') if (--level == 0) true;
false;
}