很高兴知道正则表达式来构建语言吗?

时间:2009-11-27 16:45:57

标签: regex bison lex flex-lexer

我正在阅读O'Reilly的Flex & Bison,想知道预先学习正则表达式是否有助于开发编程语言?

5 个答案:

答案 0 :(得分:14)

Regular expressions可以使用defined formal language theory,因此它们是互补的概念。

在开始构建语言之前,先了解正则表达式正式语言理论,这是一个好主意。

所以回答你的布尔问题:

答案 1 :(得分:3)

传统编程语言的语法正则表达式非常简单,因此,严格来说,您不需要成为编写编译器的正则表达式专家。另一方面,regexp属于基本的编程技能,所以我说你需要了解它们......几乎所有的东西。

答案 2 :(得分:1)

我会这么说。听起来好像你在Flex& amp;的例1.3中遇到了Flex扫描器。野牛(第5页):

/* recognize tokens for the calculator and print them out */
%%
"+"      { printf("PLUS\n"); }
"-"      { printf("MINUS\n"); }
"*"      { printf("TIMES\n"); }
"/"      { printf("DIVIDE\n"); }
"|"      { printf("ABS\n"); }
[0-9]+   { printf("NUMBER %s\n", yytext); }
\n       { printf("NEWLINE\n"); }
[ \t]    { }
.        { printf("Mystery character %s\n", yytext); }
%%

正如您所见,NUMBER,空白和神秘角色是使用简单的正则表达式定义的(好吧,其他的也是如此,但它们并不是很有趣)。您的编程语言无疑将使用其他正则表达式(例如,考虑十六进制文字,八进制文字,浮点/双精度和C / C ++ / Java中的注释的标记)。它们也是一般用于编程的有用技术,所以我现在继续学习它们。

答案 3 :(得分:0)

如果您正在创建解释语言,则可以使用正则表达式来识别代码行中的各种原子。

答案 4 :(得分:0)

也许我偏离了轨道,因为其他的回答者认为你在询问PCRE或其他什么。但是,如果你在谈论发明一种语言,那么正则表达式与语法和其他任何东西一样重要。

正则表达式是推送自动机和确定性有限自动机之间的Chomsky层次结构的一个步骤,这是解析任何东西时特别需要的非常重要的东西,尤其是代码。