提问人:IDANG 提问时间:5/16/2023 更新时间:5/17/2023 访问量:37
球拍词法师贪婪的选择
Racket lexer greedy selection
问:
我正在尝试用球拍编写词法分析器,我正在使用 parser-tools/lex 和 parser-tools/lex-sre。 我想为字符串创建令牌 - 但是因为词法分析器的选择并不贪婪,如果我有:
"this is" .... "cool"
它将是一个令牌,而不是
StringToken ,Tokens....,StringToken .
我怎样才能修复它并使其在选择中变得懒惰/贪婪? 到现在为止,我有:
[
(:
#\"
(repetition
0
+inf.0
(complement
(or
#\newline
whitespace
)
)
)
#\")
(begin (token-STRING lexeme ))
]
但它并没有像我说的那样很好地完成工作.
谢谢 Idan.M 。
答:
0赞
IDANG
5/16/2023
#1
我找到了一个小技巧来完成这项工作 - 我不太喜欢它(因为它有点限制了语言) - 但直到有人回答更好的东西:
[
(:
#\"
(repetition
0
+inf.0
(~
#\"
)
)
#\")
(begin (token-STRING (substring lexeme 1 (sub1 (string-length lexeme)) )))
]
0赞
Sorawee Porncharoenwase
5/17/2023
#2
该软件包具有 from/to
,它精确地执行您想要的操作:非贪婪匹配 from to .brag
from
to
因此,要么安装并使用此软件包,要么查看源代码以了解其工作原理。AFAICS,他们的解决方案看起来也有点骇人听闻(与你的相当),但它是封装的,因此当你定义抽象时,你只需要做一次这个骇人听闻的位。
评论