【发布时间】:2012-09-24 14:44:50
【问题描述】:
我正在尝试使用 (F)Lex 分析为 AWK 源代码构建扫描器。我已经能够识别 AWK keyworkds、cmets、字符串文字和数字,但是我被困在如何生成正则表达式以匹配变量实例名称,因为它们是非常动态的。
有人可以帮我开发一个匹配 AWK 变量的正则表达式吗? http://pubs.opengroup.org/onlinepubs/009695399/utilities/awk.html 提供 AWK 语言的定义。
变量必须以字母开头,但可以是字母数字,不区分大小写。唯一可以使用的特殊字符是下划线(“_”)。抱歉,我对 REGEX 不是很熟悉,更不用说 FLEX 的正则表达式了。
感谢您的帮助。
【问题讨论】:
-
谢谢,这对我来说绝对是一个开始。如何将条件添加到正则表达式以匹配“如果不是关键字”,其中关键字定义为:KEYWORD BEGIN|delete|END|function|in|printf|break|do|exit|getline|next|return|continue| else|for|if|print|while
-
请务必搜索原始“The Awk 编程语言”中的
compatawk 脚本。它列出了(旧)awk 规范中的所有关键字/函数。旨在帮助那些迁移到(新)awk 的人在旧代码中查找名称冲突,但有一个很好的通用解决方案来查看 awk 代码并列出了许多函数/关键字。您可以使用新关键字轻松扩展它。 (就像交叉检查一样)。祝你好运。
标签: c regex awk flex-lexer