我的词霸目前看起来像这样:
#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)]
但由于重复只需要两个参数,我不能放入第三个参数。
必须有一些简单的方法来包含大写字母。
编辑:另外,如果有某种方法可以确保标识符以字母(不是数字)开头,那么这也很好
答案 0 :(得分:1)
使用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"))