我正在考虑如何编写词法生成器。我想不出从语法中识别语言关键词的简单方法。显然所有关键词都是终端,但并非所有终端都是关键词。例如,在以下简单语法中: truth_value - > '真'| '假'; 数字 - > '0' .. '9'; 'true'和'false'是关键字,但'0','1'等不是。
感谢任何帮助。
答案 0 :(得分:1)
大多数词法生成器需要程序员写出正则表达式(或类似的东西)来识别关键字(和其他终端)。我从来没有听说过一个试图从正式语法开始,并自己弄清楚关键词。
例如,这是我多年前写的计算器的.l
文件(lex / flex)输入文件的一部分:
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]; }