美好的一天。
我想使用词法分析器来实现语言的语法高亮。本质很简单,我们找到一个标记,用特定颜色的一组符号构造它。但事实是语言标记在BNF中描述,而lex / flex使用正则表达式来编写标记。
问题本身是如何为BNF语法构建词法分析器?
答案 0 :(得分:1)
BNF是语言定义的常用符号,但这并不意味着您只需将其提供给某些编译器生成器即可。编译器编写器做的第一件事就是将语法转换为更适合扫描器和他使用的解析器的形式。
只需将您的词汇标记的BNF定义转换为正则表达式,它只需几个小时的工作。或者你可以为你的BNF写一个有限的自动机。我曾经用这两种方式写词法扫描仪,我强烈建议坚持使用lex。