如何为球拍中的词法分析器创建一个包含字母和数字的变量?

How to create a variable with letters and numbers for a lexer in racket?

我正在为 racket 中的一种简单语言创建词法分析器。此语言允许包含字母和数字的变量。

我了解如何创建数值:

(define-tokens names-and-values (NUMERICVALUE))

(define langlexer
  (lexer-src-pos
    [(repetition 1 +inf.0 numeric) (token-NUMERICVALUE (string->number lexeme))]))

而且我也明白了如何创建一个只有字母的变量:

(define-tokens names-and-values (IDENTIFIER))

(define langlexer
  (lexer-src-pos
    [(repetition 1 +inf.0 alphabetic) (token-IDENTIFIER lexeme)]))

但我对如何在词法分析器不将字母和数字分开的情况下将两者结合起来感到困惑。有没有办法将两者连接起来?

假设您正在使用 racket/lexer,请使用 (union numeric alphabetic) 来匹配数字或字母。

(define langlexer
  (lexer-src-pos
    [(repetition 1 +inf.0 (union numeric alphabetic)) 
     (if (string->number lexeme)
         (token-NUMERICVALUE (string->number lexeme))
         (token-IDENTIFIER lexeme))]))