2012-04-03 75 views
1

我在想如何编写一个词法分析生成器。我想不出一种简单的方法来从其语法中识别语言的关键字。显然,所有关键字都是终端,但并非所有终端都是关键字。例如,在以下简单文法中: truth_value - >'true'| '假'; digit - >'0'..'9'; 'true'和'false'是关键字,但'0','1'等不是。词法分析器生成器如何识别语法的关键字?

任何帮助表示赞赏。

回答

1

大多数词法分析器需要程序员写出正则表达式(或类似的东西)来标识关键字(和其他终端)。我从来没有听说过有人试图从一个正式的语法开始,并自己找出关键字。

例如,这里有一个.l文件(法/柔性)输入文件一个计算器我几年前写的一部分:

sqrt { return SQRT; } 
lg  { return LN2; } 
log  { return LOG; } 
sin  { return SIN; } 
cos  { return COS; } 
tan  { return TAN; } 
pi  { return PI; } 
exit { return EXIT; } 
prec { return PREC; } 
print { return PRINT; } 
\?  { return PRINT; } 
[ \t] { ; } 

[-+*/=()^] { return yytext[0]; } 
\n   { lineno++; return yytext[0]; } 
+0

你的意思是明确声明,即使他们已经在一些重写被使用的关键字规则呢? – 2012-04-03 19:01:30

+0

@prophet_on_that:如果我理解正确,是的。在编辑答案中查看示例。 – 2012-04-03 19:07:36

+0

谢谢,这有助于。 – 2012-04-03 19:20:17

相关问题