d位置错误信息
module lexer;
import std.stdio;
import token;
class Lexer() {
string sourceText;
char currentChar;
int charIndex;
int line;
int column;
this(string sourceText) {
this.sourceText = sourceText;
this.currentChar = '';
this.charIndex = 0;
this.line = 1;
this.column = 1;
}
}
在此遇见问题:
module dpl0c;
import std.stdio;
import lexer;
enum VERSION = "0.0.1";
void main(string[] args) {
writefln("\nThe D PL0 Compiler %s", VERSION);
string sourceText = "Hello, World!";
Lexer lex = new Lexer(sourceText);
lex.sayHello();
}
//dmd dpl0c.d lexer.d token.d
//错误:按`未实例化`的类型用`"lexer.lexer()"`模板类;要实例化它,请用`'Lexer!(arguments)'`
这里:
class Lexer() {
通过加圆括号
,使Lexer
接受编译时参数
,而这里无参,因此用途
相当狭窄.
Lexer
是模板,必须用适当
参数实例化
它.只能Lexer!()
.
因此,有两个选择,用Lexer!()
代替Lexer
,或删除括号
.
用无参
会受到限制
,它主要是为了允许
成为插件模板
,或除非使用
它,在二进制
文件中不包含它.
感谢显示模块
上的奇怪错误.
原因是:libdparse
(code-d/serve-d
及其他底层工具用的D
解析器)解析
代码,而''
,根据D语法
是无效的,因为在'x'
中,总是需要有一个符
,在词法分析
阶段直接按无效
令牌发出,解析器
不知道情况.
但是,此错误令牌
不包括位置信息
,因此默认
为0位置
.
现在解析器
在错误令牌
的令牌位置发出一个错误,因为它需要一个主式
,但是没有得到有效
的令牌.
现在在code-d
中处理发出
的错误,它认为字节
偏移是0
(是有效偏移),不知道长度,所以它选择0位置
的关键字
来猜测.
已修复,libdparse
版本,这里
现在有x = '';
语法不完整时,模块
不再是红色下划线
了.
给函数
加()
会使它们变成模板
,如果希望编译器
自动推导return/scope
属性,这将非常有利
.
它还可用于帮助函数
的仅头类型
的库(例如绑定
),否则非常烦人
的需要在原始库
之外链接
该库.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现