2016-09-18 60 views
1

我最近在学习编译原则。我注意到教科书中的所有示例都描述了一种语言词法分析器,使用正则表达式的“lex”或“flex”来展示如何分析输入源文件。正则表达式可以用来表达各种词法分析器的要求吗?

它表明所有已知的编程语言都可以使用类型3语法来实现词法分析吗?或者仅仅是教科书使用简单的样本来展示想法?

回答

1

大多数语言中的大多数词位可以用正则表达式来标识,但也有例外。 (当涉及到解析计算机语言时,总是有例外,没有例外)。

例如,您不能将C++原始字符串文字与正则表达式匹配。如果没有句法分析,JavaScript程序中的/=是用于表示除法和分配的单个词位,还是与从=开始的字符串匹配的正则表达式的开始处,您都无法辨别。允许嵌套评论的语言(不像C)需要更强大的功能。

但是编写一些正则表达式比在原始C中编写一个完整的状态机要容易得多,所以在很多例外情况下寻找弯曲flex的方法有很多动机。通过提供一些功能,flex可以在一定程度上进行合作,这些功能可以让您在必要时从正则表面紧身衣中脱身。在词法分析的高级课程中,您可能会了解更多有关这些功能的信息。