首页 > 解决方案 > 如何为球拍中的词法分析器创建带有字母和数字的变量?

问题描述

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

我了解如何创建数值:

(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)]))

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

标签: variablesracketlexer

解决方案


假设您正在使用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))]))

推荐阅读