当前位置: 技术问答>java相关
救急!有做过解释程序的朋友请看看,进行语义分析时,如何设计文法的非终结符的属性!
来源: 互联网 发布时间:2015-06-08
本文导语: 我现在设计产生式的语义子程序,实在有点力不从心,我打算用属性文法,可是不知道该如何下手设计非终结符的属性,可否指点一二: s-> a s1 s1-> or a s1 | 空 a-> b a1 a1-> and b a1 | 空 b-> c b1 b1-> =c b1 | 空 c...
我现在设计产生式的语义子程序,实在有点力不从心,我打算用属性文法,可是不知道该如何下手设计非终结符的属性,可否指点一二:
s-> a s1
s1-> or a s1 | 空
a-> b a1
a1-> and b a1 | 空
b-> c b1
b1-> =c b1 | 空
c-> d c1
c1-> +d c1 | -d c1 | 空
d-> e d1
d1-> *e d1 | /e d1 | 空
e->-f | f
f->(s) | id
告诉我如何设计非终结符的属性,万分感谢!
不要让我看书,我已经看的头都大了!毕业设计的时间已经不多了!恩人们快来啊!
s-> a s1
s1-> or a s1 | 空
a-> b a1
a1-> and b a1 | 空
b-> c b1
b1-> =c b1 | 空
c-> d c1
c1-> +d c1 | -d c1 | 空
d-> e d1
d1-> *e d1 | /e d1 | 空
e->-f | f
f->(s) | id
告诉我如何设计非终结符的属性,万分感谢!
不要让我看书,我已经看的头都大了!毕业设计的时间已经不多了!恩人们快来啊!
|
在吕映芝的《编译原理》上有一段是:
属性文法的翻译
简单赋值的是:
如
s->id = E {p = lookup(id.name);
if p=nil then
emit(p = E.place)
else error}
在这里的
lookup(id.name)是在你的符号表里面查id的name是否存在。
emit(expression)是个用来在文件里面生成中间代码的函数。
expression 指表达式,如p=E.place.
属性文法的翻译
简单赋值的是:
如
s->id = E {p = lookup(id.name);
if p=nil then
emit(p = E.place)
else error}
在这里的
lookup(id.name)是在你的符号表里面查id的name是否存在。
emit(expression)是个用来在文件里面生成中间代码的函数。
expression 指表达式,如p=E.place.
|
http://www.codeguru.com/cpp_mfc/pascal.shtml
Mini Pascal Compiler
Mini Pascal Compiler
|
nowadays, people seldom do parser themselves. JavaCC. JLex. are easy to use.
But if your project is just focused on a parser, you probably cannot use a parser generator.
poor guy.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。