在 Racket 中,如何设置词法分析器以识别包含所有数字和字母 A-Z 和 a-z 的组合的标识符

In Racket, how do I set a lexer to recognize an identifier with a combination of all numbers and letters A-Z AND a-z

我的词法分析器目前看起来像这样:

#lang racket
(require parser-tools/lex)

(define testLexer
  (lexer
    ["foo" (list 'FOO lexeme)]
    ["bar" (list 'BAR lexeme)]
    [(repetition 1 +inf.0 (char-range #\a #\z)) (list 'ID lexeme)]
    [whitespace (testLexer input-port)]))

'ID 符号适用于小写字母和数字的所有组合。 我希望它也能处理大写字母。我试过:

[(repetition 1 +inf.0 (char-range #\a #\z) (char-range #\A #\Z) (list 'ID lexeme)]

但是因为重复只有两个参数,所以我不能输入第三个参数。

一定有一些简单的方法也可以包含大写字母。

编辑:此外,如果有某种方法可以确保标识符以字母(而不是数字)开头,那也很好

使用 union 详见第 1.1 节。在 lexer documentataion

#lang racket
(require parser-tools/lex)

(define testLexer
  (lexer
    ["foo"                (list 'FOO lexeme)]
    ["bar"                (list 'BAR lexeme)]
    [(repetition 1 +inf.0 (union (char-range #\a #\z) (char-range #\A #\Z))) (list 'ID lexeme)]
    [whitespace           (testLexer input-port)]))

(testLexer (open-input-string "AbCDe"))