gpt4 book ai didi

c - 在 lex 和 yacc 中模拟 gcc 编译器

转载 作者:太空宇宙 更新时间:2023-11-04 00:01:01 27 4
gpt4 key购买 nike

main.c(故意忘记“;”)

#define MULTI_LINE_DEFINE int x = 1;\
int y = 2;\
int z = 3\
int v = 4;

void main()
{
MULTI_LINE_DEFINE

int w = 10;
}

gcc -E main.c -omain.pp

主.pp

# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"





void main()
{
int x = 1;int y = 2;int z = 3int v = 4;

int w = 10;
}

main.c:8:3: error: invalid suffix "int" on integer constant
main.c: In function 'main':
main.c:8: error: expected ',' or ';' before 'v'

如果将预处理器(“main.pp”)的输出提供给编译器,编译器如何知道错误是否在 main.cpp 的“第 8 行”?

我期待预处理器 (main.pp) 输出中的“#line ...”指令

我正在使用 yacc 和 lex 来模拟​​ gcc 行为,但使用我自己的语言。

文件1 => lex1+yacc1 => 文件2 => lex2+yacc2 => 文件3

那么是否可以在 lex 和 yacc 中像这样模拟 gcc?

file2对应gcc预处理器的输出

file3对应gcc编译器的输出

我希望文件 2 中的错误引用文件 1 中的行号

最佳答案

您误解了错误消息:

main.c:8: error: expected ',' or ';' before 'line4'

在这段代码中:

# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"





void main()
{
int line1 = 1;int line2 = 2;int line3 = 3int line4 = 4; <- THIS variable

int line10 = 10;
}

错误消息中的“'line4'”指的是变量 line4,而不是文件的第 4 行。

关于c - 在 lex 和 yacc 中模拟 gcc 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com