最近,我一直在研究关于词法分析的编译器理论。据我所知,有一些方法可以构造词法扫描器,例如:
我的问题是,其中哪一个更适合实现基本的编程语言(包括变量、条件、循环)?在实践中应如何使用?两者都能用吗?
发布于 2015-09-20 00:19:59
lex对于简单的语言很有用,但在那些语法复杂的语言中没有使用(例如,flex/lex不使用用lex编写的扫描器来处理lex输入)。偶尔有人会问如何管理多个语法扫描器(很久以前,我曾在一个程序中帮助某个人使用多个lex和yacc文件--使用sed,因为这是在flex/bison提供帮助重命名选项之前)。
为了进行实际演示,六类电子邮件对大多数语法突出显示模块使用lex/flex。不是全部。Perl和ruby在lex/flex中太复杂了,因为它们嵌入正则表达式的方式没有什么线索。另一方面,它有一个可行的(但很大)的lex/lex扫描仪--用lex编写的。为了举例说明,我在卑鄙的常见问题中添加了一个副本(参见结果)。
我们可以列出类似的事情,但通常情况下,使用lex的原因是语法的复杂性。此外,管理错误恢复(根据某些人)是一个选择的理由。
https://stackoverflow.com/questions/32658943
复制相似问题