gpt4 book ai didi

c++ - 将子字符串传递给函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:05 25 4
gpt4 key购买 nike

我正在构建 LISP 解释器。我遇到的问题是,一旦遇到“(”,我就需要将整个子字符串发送给一个函数。例如,如果我有,

( begin  ( set x  2 ) (set y 3 ) )

那我需要通过

begin  ( set x  2 ) (set y 3 ) )

当我再次遇到“(” 我需要通过

set x  2 ) (set y 3 ) )

然后

set y 3 ) )

我尝试通过计算长度来使用 substr 这样做,但这并不奏效。如果有人可以提供帮助,那就太好了。

请求代码

int a=0;
listnode *makelist(string t) //t is the substring
{
//some code
istringstream iss(t);
string word;
while(iss>>word){
if(word=="(")//I used strcmp here. Just for the sake for time saving I wrote this
//some operations
int x=word.size();
a=a+x;
word=word.substr(a);
p->down=makelist(word);//function called again and word here should be the substring
}}

最佳答案

您是否考虑过使用中间表示?那么首先将所有整个字符串解析为一个数据结构然后执行它?毕竟 Lisp 有传统的应用顺序,这意味着它们在调用函数之前首先评估参数。数据结构可能看起来像一个结构的行,它具有字符串的第一部分(即在您的示例中开始或设置)和字符串的其余部分作为第二个属性处理(如果需要,则为 head 和 rest ) .还要考虑通过递归比通过迭代更容易构造树,这里的基本情况是到达 ')' 字符。

如果您对 Lisp 解释器和编译器感兴趣,您应该查看 Lisp in Small Pieces,物有所值。

关于c++ - 将子字符串传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342729/

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