本文目录一览:
什么是语义分析?
语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用作数组下标的情况报告错误。又比如某些某些程序规定运算对象可被强制,那么当二目运算施于一整型和一实型对象时,编译程序应将整型转换为实型而不能认为是源程序的错误。
编译的哪个阶段(词法分析,语法分析,语义分析
在编译原理中,语法规则和词法规则不同之处在于:规则主要识别单词,而语法主要识别多个单词组成的句子。词法分析和词法分析程序:词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。语法分析(Syntax analysis或Parsing)和语法分析程序(Parser) 语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语义分析(Syntax analysis) 语义分析是编译过程的一个逻辑阶段. 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查.语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.
语义学的发展经历了几个阶段,各有什么特点
语义学的发展经历了三个重要阶段。
1、语文学时期(19世纪前)
早期的语义工作是注释古书(文字注解),语文学时期的语义研究就是伴随这项工作逐步产生发展的。
欧洲:古希腊为哲学典籍作注解→研究典籍的语法,同时考订意义→目的是让后人读懂
我国:语文学时期的语义研究→训诂学
成就与不足:积累了大量材料;但限于注释古书,疏通文字(通经的需要)→词义研究不全面、不科学、不系统
2、传统语义学(19世纪——20世纪二三十年代)
19世纪初,语言学独立为一门学科→从语文学进入语言学→发展步伐加快,领域扩大
这时的语义研究成为语言学的一个分支→词汇学的一部分(传统语义学时期)
主要贡献和不足:
语义研究从语文学、训诂学到传统语义学是一次飞跃。
不足:A、研究方法是原子主义的。不象语音学、语法学那样整理并研究系统,没有从关系着眼考察语义系统,把系词看作孤立的个体去研究→对语义的分析是原子主义的。
B、研究范围囿于词义。语音学从最小的语音单位一直到最大的单位。语法学也是这样。传统语义学只关注词义。
3、现代语义学(20实际20、30年代至今)
20世纪初,语义学从词汇学中分离出来成为语言学的一门新学科。
20世纪20、30年代,语义学研究进入全新发展阶段→现代语义学阶段,其广度和深度大大超过传统语义学
现代语义学的成就和不足:
成就:现代语义学不仅重视词义,也重视句义的分析,适应了自然语言和信息处理的要求,取得了成果,使语义研究更加科学化、系统化→语义研究成为了重点和热点
不足:与语音学、语法学相比,显得粗疏,不够成熟。
语义分析的举例
一个C程序片断
int
arr[2],b;
b
=
arr
*
10;
源程序的结构是正确的.
语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.
又比如在语句sum:=first+count*10中,*的两个运算对象:count是实型,10是整型,则语义分析阶段进行类型审查之后,在语法分析所得到的分析树上增加一语义处理结点,表示整型变成实型的一目算符inttoreal.
例:id1:=id2+id3*10
经语法分析得知其是Pascal语言,表示成语法树为:
:=
/
\
id1
+
/
\
id2
*
/
\
id3
10
经语义分析得插入语义处理结点的树:
:=
/
\
id1
+
/
\
id2
*
/
\
id3
inttoreal
|
10
在高级程序设计语言翻译中,语义分析阶段的工作不与目标机器的体系结构密切相关,而目标代码生成阶段的工作与目标机器的体系结构密切相关。