标签:
本问题及解答摘自本人知乎 http://www.zhihu.com/people/chaos-xie http://www.zhihu.com/question/29922657
感谢知乎网友的回答!现将问题及可能的解答记录如下:
]
Identifier Number RegularExpression String
class false null private protected public super this true
get include set
! != !== # % %= & && &&= &= ( * *= + += , - -= ->
. .. ... / /= : :: ; < << <<= <= = == === > >= >> >>= >>> >>>=
? @ [ ^ ^= ^^ ^^= { | |= || ||= ~
abstract break case catch const continue debugger default delete do else enum
export extends final finally for function goto if implements import in instanceof
interface is namespace native new package return static switch synchronized
throw throws transient try typeof use var volatile while with
if (true) /a/g ---> 正则表达式
(x+y)/2 ---> 除法
{}/a/g ---> 正则表达式
+{}/a/g ---> 除法
a++/a/g ---> 除法
RegExp.prototype.foo = 3
++/a/g.foo ---> 正则表达式
eta的答案所提到的问题还是相对比较简单的,只要你把bison当lex用就可以轻松解决,所有的那些状态都embed在你的文法里面了。主要标准就是,当你需要一个表达式而此时你看到的是/的时候,如果他不是注释,那就肯定是正则表达式。
真正复杂的问题是bison搞不定的,譬如说C++需要语义分析和语法分析同时做,让语义分析的结果来指导语法分析到底要选择哪条grammar rule来resolve conflict。
有没有不适合使用flex/lex作为词法分析器的语言?(摘自知乎)
标签:
原文地址:http://www.cnblogs.com/Chaobs/p/4463839.html