我试图在Racket中编写一个忽略行注释的词法分析器(即,从开头#
开始,直到行结束)。该行的末尾,在我的脑海里,可能是因为存在#\newline
或(eof)
,但显然以下为(eof)
不起作用在这个位置上是无效的:如何使用parser-tools/lex-sre匹配换行符或文件结尾
(define comment-lexer
(lexer
[(:or #\newline (eof))
(cons `(COMMENT) (main-lexer input-port))]
[any-char
(comment-lexer input-port)]))
是否有可能因为我将它们结合起来试图超越,或者我必须为每个人分别制定规则?
在我看来,无论你什么时候练习潜在的多行字符串,你都会遇到这个问题。这是否是错误的方法; (eof)
是否应该从最顶级的词法分析器中完成?