【发布时间】:2020-10-10 00:09:23
【问题描述】:
显然,由于我喜欢自虐,我正在 yacc/lex/glib/c 中编写一个 BASIC 解释器。 BASIC 程序存储为GLists 的数组,数组中的每个条目代表源代码中的一行。每一行都是statement_ts 的GList,在原文中用冒号隔开。
我正在尝试调试一个我认为是由不正确构建的 GList 引起的奇怪问题,但我是 lldb 中的 C 新手,所以我不清楚如何将它拆开:
(lldb) p ps->parms._if.then_expression
(GList *) $0 = 0x0000000100704b60
(lldb) po ps->parms._if.then_expression
0x0000000100704b60
(lldb) p (statement_t *)ps->parms._if.then_expression.data
(statement_t *) $0 = 0x00000001014040c0
Fix-it applied, fixed expression was:
(statement_t *)ps->parms._if.then_expression->data
then_expression 是满足条件时要运行的 statement_t 的 GList。我的代码总是只运行这些语句中的第一个,忽略其余的,这让我相信我的 .next 指针是错误的。但是怎么讲?一切都只是一个指针。
我假设我必须将其转换为语句_t 我对语法迷路了,examples that I find 没有用处。
【问题讨论】:
-
不,真正的自虐会用 BASIC 写
yacc/lex:-)