我有以下词法分析器:ID : [a-z][a-z0-9_]*;
除了匹配1a
或222z222
等标识符外,它的效果很好,但不是1
或999
等所有数字。
那么,我该怎么办才能解决这个问题呢?
答案 0 :(得分:1)
你的词法分析器是[a-z][a-z0-9_]*
。因此,这将匹配哪个以小写字母开头,后跟零个或多个小写字母或数字或下划线
如果您希望标识符以小写或数字开头但不是所有数字,请尝试
[a-z][a-z0-9_]*;|[0-9]+[a-z_][a-z0-9_]*; // Updated
所以它有两个部分
[a-z][a-z0-9_]*;
:匹配以小写[0-9]+[a-z_][a-z0-9_]*;
:如果它以数字开头,后面是一个或多个数字,则需要一个字母或下划线,后跟零个或多个字母,数字或下划线。您可以编写与([a-z]|[0-9]+[a-z_])[a-z0-9_]*;
相同的内容。