“给定令牌的上下文字符串”是什么意思?

时间:2019-04-19 00:57:57

标签: c++ tokenize

我正在基于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" ;
}

2 个答案:

答案 0 :(得分:2)

想想上下文字符串,就像您在编译器错误消息中看到的那样。上下文字符串用于显示令牌周围或其上下文。问题是要问三行:

  1. 立即在其中包含令牌的行的文本行。
  2. 包含令牌的文本行。
  3. 其中包含^的行。 ^的位置应在实际标记的下面。

有关标签的内容是为了帮助您将^放在正确的位置。基本上,这就是说制表符的作用就像可变数量的空格。制表符作用的空格数使下一个字符为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) {
             ^