variables - 如何为球拍中的词法分析器创建带有字母和数字的变量?
问题描述
我正在为球拍中的一种简单语言创建一个词法分析器。这种语言允许包含字母和数字的变量。
我了解如何创建数值:
(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))]))
推荐阅读
- python - Why does the 'is' operator behave unexpectedly with arithmetically equal expressions
- awk - 使用 awk 将 }{ 解释为 RS 并使用 ORS }\n{ 输出
- reactjs - How do I fix the error, "Unexpected token (1:61)" in React?
- java - Why unidirectional @OneToMany update is not working
- python - Issue in importing module and invoking a function , circular import in python program
- php - Warning in ./libraries/classes/Config.php#1681 mkdir(): Permission denied
- hibernate - Why does hibernate 5.3 not support transactional caches with infinispan
- javascript - Hide form after submit (but after bringing it back?)
- android - Linphone Android Build Compile Error: ChatMessagesFragment is not abstract
- python - How can I automate a python code for many cells?