bool Scanner::lex_opt_name(std::string &name)
{
    tok = cur;

#line 1142 "src/parse/lex.cc"
{
	unsigned char yych;
	static const unsigned char yybm[] = {
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128,   0,   0,   0,   0,   0,   0, 
		  0, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128,   0,   0,   0,   0, 128, 
		  0, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
		  0,   0,   0,   0,   0,   0,   0,   0, 
	};
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*(mar = cur);
	if (yych <= 0x1F) {
		if (yych <= '\n') {
			if (yych >= '\t') {
				yyt1 = cur;
				goto yy182;
			}
		} else {
			if (yych == '\r') {
				yyt1 = cur;
				goto yy182;
			}
		}
	} else {
		if (yych <= '*') {
			if (yych <= ' ') {
				yyt1 = cur;
				goto yy182;
			}
			if (yych >= '*') {
				yyt1 = cur;
				goto yy183;
			}
		} else {
			if (yych == ':') goto yy185;
		}
	}
yy181:
#line 301 "../src/parse/lex.re"
	{
        msg.error(cur_loc(), "ill-formed start of a block: expected a space, a"
            " newline, a colon followed by a block name, or the end of block `*"
            "/`");
        return false;
    }
#line 1215 "src/parse/lex.cc"
yy182:
	++cur;
	cur = yyt1;
#line 308 "../src/parse/lex.re"
	{ name.clear();              return true; }
#line 1221 "src/parse/lex.cc"
yy183:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy182;
yy184:
	cur = mar;
	goto yy181;
yy185:
	yych = (unsigned char)*++cur;
	if (yych <= '^') {
		if (yych <= '@') goto yy184;
		if (yych >= '[') goto yy184;
	} else {
		if (yych == '`') goto yy184;
		if (yych >= '{') goto yy184;
	}
yy186:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 128) {
		goto yy186;
	}
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy184;
		if (yych <= '\n') {
			yyt1 = cur;
			goto yy187;
		}
		if (yych <= '\f') goto yy184;
		yyt1 = cur;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy184;
			yyt1 = cur;
		} else {
			if (yych == '*') {
				yyt1 = cur;
				goto yy188;
			}
			goto yy184;
		}
	}
yy187:
	++cur;
	cur = yyt1;
#line 309 "../src/parse/lex.re"
	{ name.assign(tok + 1, cur); return true; }
#line 1269 "src/parse/lex.cc"
yy188:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy187;
	goto yy184;
}
#line 310 "../src/parse/lex.re"

}