我正在基于nand2tetris课程编写一个分词器分配(在c ++中),部分分配需要上下文字符串。我不确定这是什么意思,我正在寻找细分或某种伪/示例代码来说明其含义。 (我觉得这是盯着书架在你面前找一本书的情况,但因为你已经找了这么长时间,所以看不到!)
说明如下:
为给定令牌生成上下文字符串。它显示线 在令牌之前,包含令牌的行和带有^的行 标记令牌的位置。制表符停止位中的每8个字符 上下文字符串,制表符由空格(1到8)代替,以便下一个 字符从8个字符的边界开始。
我知道这可能是明显的英语而不是代码的情况,但是我只是有点失落,任何帮助都是传奇,因为我仍然在编程方面非常基础。
我在想类似的东西:
string token_context(Token token)
{
return "previous line \n" + "token" + "somehow having 8 spaces and the ^ symbol where the token is" ;
}
答案 0 :(得分:2)
想想上下文字符串,就像您在编译器错误消息中看到的那样。上下文字符串用于显示令牌周围或其上下文。问题是要问三行:
^
的行。 ^
的位置应在实际标记的下面。有关标签的内容是为了帮助您将^
放在正确的位置。基本上,这就是说制表符的作用就像可变数量的空格。制表符作用的空格数使下一个字符为8的倍数。例如,"ab\tc"
应该与"ab c"
相同,因为制表符(\t
)在第三个空格处,因此它的行为就像6个空格,因此c
将位于字符串的第八个位置。
答案 1 :(得分:0)
请编译并运行此代码。我认为它将演示@Jonathan Geisler解释的制表符和空格的用法。
请注意,在您教授的系统上,假定制表符占用8个空格。但是,在我的系统上,它们输出4个空格的宽度。因此,我将一个常量定义为tab_spaces设置为8。如果您发现克拉的位置不合适,请将其更改为4并重试。
检查调试器中的输出,我认为这很清楚。
awk '{gsub(">, ","&"ORS)} 1' Input_file
以退出代码0结束的过程
代码:
Output:
int index = 10;
if(index < 8 & index % 2 == 1) {
^