我有以下词法分析器:ID : [a-z][a-z0-9_]*;
除了匹配类似1a
or的标识符外,它工作得很好222z222
,但不是所有的数字都像1
or 999
。
那么,我应该怎么做才能解决这个问题呢?
我有以下词法分析器:ID : [a-z][a-z0-9_]*;
除了匹配类似1a
or的标识符外,它工作得很好222z222
,但不是所有的数字都像1
or 999
。
那么,我应该怎么做才能解决这个问题呢?
你的词法分析器是[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_]*;
.