我正在编写一个简单的javascript tokenizer来检测基本类型:Word,Number,String,RegExp,Operator,Comment和Newline。一切都很顺利,但我无法理解如何检测当前字符是RegExp分隔符还是除法运算符。我没有使用正则表达式,因为它们太慢了。有人知道检测它的机制吗?感谢。
答案 0 :(得分:6)
您可以通过前面的标记来确定流中的内容。浏览词法分析器发出的每个标记,并询问是否可以合理地跟随分割符号或正则表达式;你会发现两个结果集的标记是不相交的。例如,(
,[
,{
,;
和所有二元运算符只能后跟正则表达式。同样,)
,]
,}
,标识符和字符串/数字文字只能跟随分号。
有关详细信息,请参阅ECMAScript spec的第7节。
答案 1 :(得分:1)
遇到斜线时你必须检查上下文。如果斜杠在表达式之后,那么它必须是除法,或者它是正则表达式的开始。
为了识别上下文,也许你必须制作语法解析器。
例如
function f() {}
/1/g
//this case ,the slash is after a function definition, so it's a refexp start
var a = {}
/1/g;
//this case, the slash is after an object expression,so it's a division