0

我有以下词法分析器:ID : [a-z][a-z0-9_]*;

除了匹配类似1aor的标识符外,它工作得很好222z222,但不是所有的数字都像1or 999

那么,我应该怎么做才能解决这个问题呢?

4

1 回答 1

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_]*;.

于 2013-09-23T08:32:25.310 回答