首页
社区
课程
招聘
[求助]lex&yacc:如何纯解释执行分支循环语句??
发表于: 2007-2-23 12:18 5539

[求助]lex&yacc:如何纯解释执行分支循环语句??

2007-2-23 12:18
5539
想写个类C脚本解释器,我想纯解释执行,边分析语法边执行,不生成中间代码和虚拟机

顺序执行都比较容易,直接在expression规则里写执行代码就行了
但分支循环不好处理,比如if(expression){statement}语句,自下而上的分析,先执行的是expression和statement的语义代码,这样在statement的语义代码里就不知道这是个条件语句
由于自下而上,总是无法预先知道情况
是否应该将statement的脚本代码文本提取出来另由一分析器执行,或者由分析器递归调用自己,以便形成一个自上而下的机制?yacc&lex环境里要怎么提取文本呢?
有没有相关的参考文章?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
网上资料不多
自带的帮助和示例研究研究?
2007-2-26 23:10
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道这篇文章能不能帮上忙.....

d05K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4G2k6r3g2Y4N6i4u0#2i4K6u0W2j5$3!0E0i4K6u0r3j5%4y4Z5j5i4u0H3i4K6u0r3i4K6u0W2L8X3g2@1i4K6u0r3L8X3g2@1i4K6g2X3k6$3g2F1k6i4u0S2L8q4)9J5c8Y4m8S2N6s2c8W2M7X3&6K6i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5k6i4m8Z5M7q4)9J5c8X3x3I4x3U0R3H3y4b7`.`.
2007-2-27 10:33
0
雪    币: 135
活跃值: (231)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
4
谢谢,这个问题解决了

if是通过设置一个全局skip变量解决,所有的expression都首先判断skip,若不位零则不执行语义

while可以改变lex的文本缓冲区指针解决,不过这一方法要用到lex.cpp中非文档化的变量,可能只使用于特定版本,并且文本输入只能是内存缓冲区模式不能是FILE*yyin模式,因为FILE模式时只是部分文本在内存中
改变文本缓冲区的函数:
int resetloop(char*text)
{
*yy_c_buf_p=yy_hold_char;
yy_c_buf_p=text;
yy_hold_char=*text;
return 1;
}
char*text可由yytext获得,yytext正是"while"的首地址,且yytext就指向文本缓冲区内,yy_hold_char是yytext末尾的"\0"原先的字符,这是为了直接在文本缓冲区中形成yytext
"while"   {yylval.state=(int)yytext;return WHILE;}
2007-2-27 13:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
文章我倒是不知道,PL Compiler 我没学过(汗颜)
现成品我倒是知道一些

d0aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8H3L8$3c8K6K9h3q4V1i4K6u0W2K9r3!0E0k6g2)9J5k6h3y4W2M7X3&6Q4x3X3g2U0K9q4)9J5c8Y4m8H3L8$3c8K6K9h3q4V1i4K6u0r3M7$3g2W2M7W2)9J5c8R3`.`.
d96K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2S2L8h3q4A6j5$3S2Q4x3X3g2#2L8X3W2Q4x3X3g2U0j5#2)9J5c8X3!0D9k6q4)9#2k6Y4y4A6N6r3g2Q4x3X3g2Z5N6r3@1`.

etc...
2007-2-28 00:41
0
雪    币: 10
活跃值: (165)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
需要二次扫描~
2007-3-3 19:41
0
游客
登录 | 注册 方可回帖
返回