正则表达式可用于表达各种词法解析器要求吗?

时间:2016-09-18 04:41:23

标签: parsing expression grammar lex lexical

我最近学习编译器原则。我注意到教科书中的所有例子都描述了使用" lex"的语言词汇解析器。或" flex"使用正则表达式来展示如何分析输入源文件。

是否表明所有已知的编程语言都可以使用类型3语法来实现词法解析?或者只是教科书使用简单的样本来表达想法?

1 个答案:

答案 0 :(得分:1)

大多数语言中的大多数词汇都可以使用正则表达式来识别,但也有例外。 (当涉及到解析计算机语言时,总会有例外。毫无例外。)

例如,您无法将C ++原始字符串文字与正则表达式匹配。如果没有语法分析,你无法判断Javacript程序中的/=是否是用于表示除分配的单个词汇,或者它是否是正则表达式的开头,它匹配以 = <开头的字符串/ KBD>。允许嵌套注释的语言(与C不同)需要更强大的功能。

但是编写一些正则表达式比在原始C中编写完整的状态机要容易得多,所以有很多动机可以找到弯曲的方法,以适应一些特殊情况。并且flex在一定程度上通过提供允许您在必要时逃离正则表达式紧身衣的功能进行合作。在词汇分析的高级课程中,您可以了解有关这些功能的更多信息。