if 条件表达式 then
结果表达式
else
结果表达式;
说明:
1、if then else 的使用可以嵌套,类似一般编程语言的if 语句的规则,结尾用分号标识‘;’。
2、条件表达式中可以有AND ,OR ,NOT 等逻辑运算符
3、结果表达式为一个单行的四则运算表达式。
4、脚本中可以有多个这样的if then 语句。
我基本上可以解决条件表达式和结果表达式的处理,但对if then else 的处理还没有好的办法,各位高手指点小弟一二,最后有示例代码,^_^!!!
10 个解决方案
#1
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
#2
谢谢楼上,有没有代码可以借鉴一下的!
#3
自己up!
#4
yacc
lex
bison
你找台 linux / unix 机器 man yacc 看看
或者 http://www.gnu.org/software/bison/bison.html
我觉得这个对你比较合适
毕竟我只听说过有人要写语法分析程序
还没见到有人真正去写出来(例如我^_^)
lex
bison
你找台 linux / unix 机器 man yacc 看看
或者 http://www.gnu.org/software/bison/bison.html
我觉得这个对你比较合适
毕竟我只听说过有人要写语法分析程序
还没见到有人真正去写出来(例如我^_^)
#5
或者你写个宏吧,也许更快!!
我的代码在家里,现在在公司里,不在身边,没办法,要不然可以发给你看看哦:)
要不,以后再联系?zzyfrank@hotmail.com
我的代码在家里,现在在公司里,不在身边,没办法,要不然可以发给你看看哦:)
要不,以后再联系?zzyfrank@hotmail.com
#6
单个if else 应是容易处理的, 箝套(加括号或不加括号)的 if else 有些复杂, 要弄清楚每个else所配的是哪一个if.
#7
coffeebike(咖啡色BIKE) ( ) 信誉:100 2002-12-27 11:15:00 得分:0
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
同意
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
同意
#8
递归下降分析很简单:)
void if_function()
{
if(Sym == ifSYM)
{
getSym();
condition_function(); //条件表达式处理
if(Sym==thenSYM)
{ getSym();
statement_funtion(); //结果表达式处理
if(Sym==elseSYM)
statement_function();
}
else Error();
}
}
void statement_function()
{
…………
…………
getSym();
if(Sym==ifSYM)
if_function(); //递归调用,可以处理箝套
…………
…………
}
Sym 表示当前分析的符号
getSym() 取下一个符号
void if_function()
{
if(Sym == ifSYM)
{
getSym();
condition_function(); //条件表达式处理
if(Sym==thenSYM)
{ getSym();
statement_funtion(); //结果表达式处理
if(Sym==elseSYM)
statement_function();
}
else Error();
}
}
void statement_function()
{
…………
…………
getSym();
if(Sym==ifSYM)
if_function(); //递归调用,可以处理箝套
…………
…………
}
Sym 表示当前分析的符号
getSym() 取下一个符号
#9
把四则表达式运算处理放在statement_function里
写出语法产生式,一样写递归分析函数
如
E->T|E+T|E-T
T->F|T*F|T/F
F->(E)|i
Express_function()
{
switch( Sym):
{case (是T的开始符): Term_function(); break;
case (是E的开始符):
Express_function();
if(Sym=='+') { ……}
else(Sym==‘-’){…… }
break;
}
getSym();
}
Term_funciton()
{
类似处理^_^
}
…………
写出语法产生式,一样写递归分析函数
如
E->T|E+T|E-T
T->F|T*F|T/F
F->(E)|i
Express_function()
{
switch( Sym):
{case (是T的开始符): Term_function(); break;
case (是E的开始符):
Express_function();
if(Sym=='+') { ……}
else(Sym==‘-’){…… }
break;
}
getSym();
}
Term_funciton()
{
类似处理^_^
}
…………
#10
谢谢楼上各位!!!
我在这找到了一个可以执行DELPHI代码的控件,有源代码。
http://www.tommstudio.com/newclub30/d_download.asp
我准备就用它了,它可以处理各种语句,使用delphi的函数,功能很强大,值得好好研究一下。
我在这找到了一个可以执行DELPHI代码的控件,有源代码。
http://www.tommstudio.com/newclub30/d_download.asp
我准备就用它了,它可以处理各种语句,使用delphi的函数,功能很强大,值得好好研究一下。
#1
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
#2
谢谢楼上,有没有代码可以借鉴一下的!
#3
自己up!
#4
yacc
lex
bison
你找台 linux / unix 机器 man yacc 看看
或者 http://www.gnu.org/software/bison/bison.html
我觉得这个对你比较合适
毕竟我只听说过有人要写语法分析程序
还没见到有人真正去写出来(例如我^_^)
lex
bison
你找台 linux / unix 机器 man yacc 看看
或者 http://www.gnu.org/software/bison/bison.html
我觉得这个对你比较合适
毕竟我只听说过有人要写语法分析程序
还没见到有人真正去写出来(例如我^_^)
#5
或者你写个宏吧,也许更快!!
我的代码在家里,现在在公司里,不在身边,没办法,要不然可以发给你看看哦:)
要不,以后再联系?zzyfrank@hotmail.com
我的代码在家里,现在在公司里,不在身边,没办法,要不然可以发给你看看哦:)
要不,以后再联系?zzyfrank@hotmail.com
#6
单个if else 应是容易处理的, 箝套(加括号或不加括号)的 if else 有些复杂, 要弄清楚每个else所配的是哪一个if.
#7
coffeebike(咖啡色BIKE) ( ) 信誉:100 2002-12-27 11:15:00 得分:0
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
同意
最经典的办法是自己做一个解释器,先词法分析,再语法分析,最后语义分析,有经典的算法,看看编译原理就可以知道了:)
同意
#8
递归下降分析很简单:)
void if_function()
{
if(Sym == ifSYM)
{
getSym();
condition_function(); //条件表达式处理
if(Sym==thenSYM)
{ getSym();
statement_funtion(); //结果表达式处理
if(Sym==elseSYM)
statement_function();
}
else Error();
}
}
void statement_function()
{
…………
…………
getSym();
if(Sym==ifSYM)
if_function(); //递归调用,可以处理箝套
…………
…………
}
Sym 表示当前分析的符号
getSym() 取下一个符号
void if_function()
{
if(Sym == ifSYM)
{
getSym();
condition_function(); //条件表达式处理
if(Sym==thenSYM)
{ getSym();
statement_funtion(); //结果表达式处理
if(Sym==elseSYM)
statement_function();
}
else Error();
}
}
void statement_function()
{
…………
…………
getSym();
if(Sym==ifSYM)
if_function(); //递归调用,可以处理箝套
…………
…………
}
Sym 表示当前分析的符号
getSym() 取下一个符号
#9
把四则表达式运算处理放在statement_function里
写出语法产生式,一样写递归分析函数
如
E->T|E+T|E-T
T->F|T*F|T/F
F->(E)|i
Express_function()
{
switch( Sym):
{case (是T的开始符): Term_function(); break;
case (是E的开始符):
Express_function();
if(Sym=='+') { ……}
else(Sym==‘-’){…… }
break;
}
getSym();
}
Term_funciton()
{
类似处理^_^
}
…………
写出语法产生式,一样写递归分析函数
如
E->T|E+T|E-T
T->F|T*F|T/F
F->(E)|i
Express_function()
{
switch( Sym):
{case (是T的开始符): Term_function(); break;
case (是E的开始符):
Express_function();
if(Sym=='+') { ……}
else(Sym==‘-’){…… }
break;
}
getSym();
}
Term_funciton()
{
类似处理^_^
}
…………
#10
谢谢楼上各位!!!
我在这找到了一个可以执行DELPHI代码的控件,有源代码。
http://www.tommstudio.com/newclub30/d_download.asp
我准备就用它了,它可以处理各种语句,使用delphi的函数,功能很强大,值得好好研究一下。
我在这找到了一个可以执行DELPHI代码的控件,有源代码。
http://www.tommstudio.com/newclub30/d_download.asp
我准备就用它了,它可以处理各种语句,使用delphi的函数,功能很强大,值得好好研究一下。