实现词法分析器但需要帮助从输入中删除注释

时间:2016-11-17 23:43:05

标签: c lexer

我正在用c中的简单编程语言实现一个词法分析器,基本上是读取令牌并将它们标识为符号,数字,保留字等等。我已完成这部分工作但是我遇到了麻烦在它输入之前的步骤。也就是说,我必须首先在输入编程代码中找到任何注释,并用空格替换注释符号(在c中相同)和它们之间的所有内容。然而,当我试图这样做时,它看起来非常奇怪。我很确定这是因为我已经用了一段时间了,因为我使用了c而且我可能会对它处理内存的方式感到困惑,所以任何帮助都会受到赞赏。

另外我知道c中有一个内置的令牌功能但我不允许在这里使用它以防有人建议使用它的修复。

//function to remove comments from input code
    void makeClean(char *clean)
    {
        int i = 0;
        while (clean[i] != '\0' && i < 500)
        {
            if (clean[i] == '/' && clean[i + 1] == '*')
            {
                while ((!(clean[i] == '*' && clean[i + 1] == '/')) && i < 500)
                {
                    clean[i] = ' ';
                    i++;
                }
                clean[i] = ' ';
                clean[i + 1] = ' ';
                i++;
            }
            i++;
        }
    }
    //main
    int main(int argc, char **argv)
    {
        char input[500];
        //char *clean = input;
        int i = 0;
        char flag1[9];
        char flag2[9];
        char temp[500];
        while (argv[1][i] != '\0')
        {
            input[i] = argv[1][i];
            i++;
        }
        char *clean = input;
        //getting possible flags
        for (i = 0; i < 17; i++)
        {
            if (i < 8)
                flag1[i] = input[i];
            if (i > 8)
                flag2[i - 9] = input[i];
        }
        flag1[9] = '\0';
        flag2[9] = '\0';
        //flag checks
        if (strcmp(flag1,"--source") == 0 || strcmp(flag2,"--source") == 0)
            printf("source code:\n------------\n%s\n\n",input);
        if (strcmp(flag1,"--clean") == 0 || strcmp(flag2,"--clean") == 0)
        {
            makeClean(clean);
            printf("source code without comments:\n-----------------------------\n%s\n\n",clean);
        }
        //outputting tokens and types
        printf("tokens:\n-------\n\n");
        lex(clean);
        return 0;
    }

0 个答案:

没有答案