在 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"))
我的词法分析器目前看起来像这样:
#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"))