Lexer in D

Dmitry Olshansky dmitry.olsh at gmail.com
Sat Mar 2 11:09:15 PST 2013


02-Mar-2013 23:01, Namespace пишет:
> I hope I understand you right this time:
> http://dpaste.1azy.net/4c2e4428
>
> Was this your idea?
> With this I reached between 215 and 230 msecs.

This is a mess of conditionals is what a direct array of 256 entries 
would avoid:

	int idx;
	if (value[0] != '_') {
		idx = value[0] - 'a';
		if (idx == 26) return false;
	} else {
		idx = 26;
	}
	
	if (idx < 0 || idx > 26) {
		// debug writeln("kword: ", idx, ':', value[0]);
		return false;
	}
	
	if (keywords[idx] is null) return false;
	
	return keywords[idx].canFind(value);

Gaining some speed in the process. Plus another layer of array to 
discern keywords by length. You see why I suggested to generate the code 
in the first place ? ;)

BTW what's the reason to separate keywords and type keywords? They are 
processed the same in lexer and only parser somewhere up above knows 
what to do with these regardless. Just return different token values for 
each.

-- 
Dmitry Olshansky


More information about the Digitalmars-d-learn mailing list