我的程序中有令牌数据类型.看起来像这样:
data Token
= StringToken Strin
| NumberToken Integer
| IfToken
| ElseToken
... -- lots of tokens here
Run Code Online (Sandbox Code Playgroud)
我在我的解析器中使用这种数据类型,它运行正常.但现在我想向令牌添加一些额外的信息(源位置信息).所以我可以更改我的数据类型声明并使用记录:
data Token
= StringToken {value :: String, srcLoc :: SourceLocation}
| NumberToken {value :: String, srcLoc :: SourceLocation}
| IfToken {srcLoc :: SourceLocation}
| ElseToken {srcLoc :: SourceLocation}
... -- lots of tokens here
Run Code Online (Sandbox Code Playgroud)
但这个解决方案对我来说似乎并不实用和美观.那么这个问题有更好的解决方案吗?谢谢.
是:
data TokenLoc = TokenLoc {tok::Token , srcLoc::SourceLocation}
Run Code Online (Sandbox Code Playgroud)
这将令牌和位置存储在一起,但干净地将它们分开,避免重复.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |