Warning: session_start(): open(/var/lib/php/sessions/sess_ev0o6mml36prg55gb2jr86mnov, 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"));
}
sbool checkNTokenHygiene(S s) {
L tok = javaTokNPunctuation(s);
if (l(tok) == 1) true;
ret checkForward(tok) && checkBackward(tok);
}
sbool checkForward(L tok) {
int level = 0;
for (int i = 2; i < l(tok)-1; i += 2)
for (char c : characters(tok.get(i)))
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)-2; i > 0; i -= 2)
for (char c : reversedCharacters(tok.get(i)))
if (c == '}') ++level;
else if (c == '{') level = max(0, level-1);
if (level == 0) true;
for (char c : reversedCharacters(first(tok)))
if (c == '{') if (--level == 0) true;
false;
}