1
我在想如何编写一个词法分析生成器。我想不出一种简单的方法来从其语法中识别语言的关键字。显然,所有关键字都是终端,但并非所有终端都是关键字。例如,在以下简单文法中: truth_value - >'true'| '假'; digit - >'0'..'9'; 'true'和'false'是关键字,但'0','1'等不是。词法分析器生成器如何识别语法的关键字?
任何帮助表示赞赏。
我在想如何编写一个词法分析生成器。我想不出一种简单的方法来从其语法中识别语言的关键字。显然,所有关键字都是终端,但并非所有终端都是关键字。例如,在以下简单文法中: truth_value - >'true'| '假'; digit - >'0'..'9'; 'true'和'false'是关键字,但'0','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]; }
你的意思是明确声明,即使他们已经在一些重写被使用的关键字规则呢? – 2012-04-03 19:01:30
@prophet_on_that:如果我理解正确,是的。在编辑答案中查看示例。 – 2012-04-03 19:07:36
谢谢,这有助于。 – 2012-04-03 19:20:17