问题描述
我最近了解了词法和语法分析,并且正在考虑动态变量。
假设您使用的语言语法如下:
Range
最后,内存应包含:
interface Range {
readonly start: number;
readonly end: number;
}
const foo = (r: Range) => console.info('Range',r);
const range: Partial<Range> = {start: 10};
if (typeof range.start === "number" && typeof range.end === "number") {
foo(range)
}
,if (typeof range.start === "number" && typeof range.end === "number") {
foo({start: range.start,end: range.end})
}
,a = "1"
b%a# = 22
a = "2"
c%a# = 35
但是我不清楚如何实现此功能。
如果有人对此有所了解,我将不胜感激。
解决方法
“动态”实际上意味着它在运行时发生,而不是在编译期间发生。因此,在词法分析期间不会实现此功能。解析器(包括词法分析器)需要做的是将b%a#
转换为运行时操作的表示形式,“将字符串文字b
与变量a
的当前值连接起来,结果中的动态变量引用。”
执行此操作后,运行时很可能会使用某种哈希表通过其名称查找动态变量。