Python中文
首页
教程
问答
标签
搜索
登录
注册
使用两个不同的函数后,全局变量不会保持其状态
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>所以我现在有麻烦了好几天。基本上,我正在为一种使用python创建的语言编写编译器。我们已经完成了sintax和lexic部分,现在正在创建目录过程和变量表(符号表)。在我的Yacc文件中,我有:</p> <p><strong>Yacc.py</strong></p> <pre><code>import ply.yacc as yacc import sys tokens = Lex.tokens #Global variables procs = { } current_fid = "" # add new value to the procedure directory def add_procs_to_dict(fid, ftipo, fparams, fdict): proc_dict = {} proc_dict[fid] = { 'Tipo' : ftipo, 'Params' : fparams, 'Var_dict' : fdict } return proc_dict # add new variable value to the procedure directory def add_vars_to_dict(vid, vtipo, vparams): var_dict = { 'Nombre' : vid, 'Tipo' : vtipo, 'Params' : vparams } print(current_fid) print(procs) return proc_dict # Parsing Rules def p_juego(p): '''Juego : JUEGO ID DOSP JuegoA JuegoB MainProgram''' current_fid = p[2] procs = add_procs_to_dict( p[2], p[1], 'void', {}) def p_vars(p): '''Vars : VAR ID COR_I Exp COR_D VarSizeA Vars2 DOSP Tipo PCOMA''' add_vars_to_dict( p[2], p[9], p[4]) </code></pre> <p>这里需要注意的重要一点是,我正在创建一个变量,它将当前ID(名为<code>current_fid</code>,它是插入字典中的最后一个过程的名称)和一个字典变量(名为<code>procs</code>,即过程/函数目录)保存为全局范围。在</p> <p>当解析器输入解析规则<code>p_juego(p):</code>(假设它所输入的代码是正确的,并且我已经单独运行了它),它假设将它在解析器进程中找到的值设置为变量(<code>current_fid</code>和<code>procs</code>)。它确实设置了正确的值。我可以打印函数内部的变量并返回期望值。在</p> <p>一旦解析器退出函数<code>p_juego(p)</code>并进入另一个类似<code>p_vars(p)</code>的函数(此函数将插入全局目录的最后一个过程/函数的符号表写到字典中),全局变量(<code>current_fid</code>和<code>procs</code>)就没有值了。在<code>p_vars(p)</code>内有2个打印,始终为变量显示null。在</p> <p>我对python还比较陌生,也许我对这门语言有些欠缺。我的意图是,如果我在所有事情之前(在代码的顶部)定义一个变量,那么使用这些“全局”变量的函数将更新它们的值并始终保留它们,即使另一个函数试图访问它们。 我尝试在一个名为语义.py但变量的值在先前设置值的函数之外始终为null。在</p> <p>我错过了什么?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>感谢大家的快速反应。我确实按照你们大多数人的建议做了另一个类,但是我没有保留我的全局值的原因是函数的调用顺序出乎我的意料。PLY库使用自下而上的过程来导航sintax树。实际上,函数是在even设置之前读取值时调用的。在</p> <p>我很感谢大家的回复,因为这是我在SO中的第一篇文章,每个回复我答案、问我问题甚至更正我帖子的人都鼓励我继续使用这个网站。在</p> <p>再次感谢。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
3 回答
如何在乒乓球游戏中阻止球
3 回答
如何在乘法和模中不乘空间?
6 回答
如何在乘法和除以2个不同的数字之间进行交换?
8 回答
如何在也是数据一部分的单个字符上拆分大字符串
6 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
9 回答
如何在事件wxWidgets中传递自定义数据
6 回答
如何在事件中使用lambda i=i?
2 回答
如何在事件中心只接收最近的数据
5 回答
如何在事件发生之前保持云函数运行?
10 回答
如何在事件发生后使页面重定向到同一页面
9 回答
如何在事件回调之间保持python生成器的状态
4 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
6 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
2 回答
如何在事件处理程序中访问外部对象?
4 回答
如何在事件循环中将协程打包为正常函数?
5 回答
如何在事件循环之外运行协同程序?
10 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
4 回答
如何在事件文件中只保留一份摘要?
9 回答
如何在事件模板中添加事件
3 回答