动态变量在词法分析中

问题描述

我最近了解了词法和语法分析,并且正在考虑动态变量。

假设您使用的语言语法如下:

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的当前值连接起来,结果中的动态变量引用。”

执行此操作后,运行时很可能会使用某种哈希表通过其名称查找动态变量。