程序语法和语义

程序语法和语义
程序语法和语义

程序语法和语义

编程语言是一组用于构造一个程序的规则、符号和特殊字。规则既有语法也有语义的规则。

语法:在编程语言中,控制如何书写有效指令的正式规则。

在编程语言中,语法是是一组正式的,确切定义了字母、数字和符号结合在一起被使用的规则。

语义:编程语言中,决定指令的含义的的规则。

语法模板

一个语法模板是定义C++结构的通用例子。图形方便显示了哪些是可选择的,哪些能够被重复。在C++

语言中,有黑影的字是字面上的字或字符,无黑影的字能够由其它模板重复。花括号被用来指示项目列表,从项目列表中选择一项。

让我们来看一个例子,这个模板定义了C++中的标识符。

阴影部分指示了定义部分是可选的。三个点(. . .)意味着前导符号或阴影块能够被重复。然而,C++中的一个标识符必须用字母或下划线开始,接着后面的一个或多个字母、下划线或数字是可选的。

这些是用于字母和数字的模板:

字母数字

A~Z a~z 0~9

现在让我们来看看C++中主函数main的语法模板:

main 函数用int开始,接着单词main,然后是左右括号。函数的第一行是起首部分,在起首部分后,左花括号标记着函数语句 (函数体)的开始。阴影和三个点(注:本网页只有两个点)指示了函数体由零个或多个语句组成。最后右花括号指示了函数的结束。

最短的C++程序是:

int main( )

{

return 0;

}

为程序的元素命名: 标识符

C++中,标识符被用来为某事命名――例如为像子程序这样的程序命名,并将程序存储在计算机的存储器中。标识符由字母 (A-Z, a-z), 数字 (O-9), 和下划线( _ )组成,但是必须用字母或下划线开始。

标识符与函数和数据对象联系在一起,使用标识符就涉及到函数或数据。

(在某些C++系统中,用下划线开始的标识符有特殊的意义,所以最好用字母开始一个标识符。) 这里是一些有效标识符的例子:

sum_of_squares J9 box_22A GetData Bin3D4 count

下面是一些无效标识符的例子以及为什么它们是无效的原因:

表中最后的标识符int是一个保留字的例子。

C++中,保留字有特殊的用途,你不能像编程者定义标识符那样使用它。附录A列出C++中所有的保留字。

保留字: C++中有特殊意义的单词,它不能像编程者定义标识符那样被使用。

使用有意义、可读性好的标识符

C++是一种敏感的语言。大写字母与小写字母是不同的。标识符:

PRINTTOPPORTION printtopportion RiNtToPpOrTiOn PrintTopPortion

是四种有区别的名字,无论如何不能交换。正如你看到的,这些形式中的最后一个标识符是最容易读的。

在本书中,我们使用大写字母、小写字母和下划线组合在一起的标识符。

数据和数据类型

数据被存储在计算机的存储器中,每一个存储器的位置有唯一的地址,我们用这个地址存储和取出数据。在机器语言代码中,存储器的每个位置的实际地址是一个二进制数。 C++中,我们使用标识符来命名存储器的位置;然后编译器为我们将标识符转换成二进制。这是高级编程语言的有点之一:它避免我们与存储器位置的数字地址(在这个地址中,我们存储数据和指令)接触。

数据类型:一组特殊的数据值及在这组数据值上的操作。

在C++中,每片数据必须具有指定的数据类型,数据类型决定了数据在计算机中如何被表示以及计算机能够在数据上处理的种类。

一些类型的数据被如此频繁的使用,所有C++为我们定义了它们。这些标准类型的例子是int (用于整数)、float (用于具有小数的实数)和 char (用于字符数据)。

此外,C++允许编程者定义自己的数据类型( 用户定义的类型)。

在本章中,我们集中在两种数据类型――一种是用来描述只有一个字符组成的数据,另一种是用来描述字符串的数据。

char 数据类型:标准类型char描述由一个字母数字字符(一个字母、一个数字或一个特殊符号)组成的数据:

‘A’ ‘a’ ‘8’ ‘2’ ‘+’ ‘-‘ ‘$’ ‘?’ ‘*’ ‘ ‘

注意每个字符用单引号括起来,也就是说,C++编译器需要引号来区分字符‘8’和整数值8,因为两种数据在计算机内存储是不同的。注意空格,‘ ‘,也是有效的字符。

string数据类型: 鉴于类型char的值被限定为一个字符,因此string是一系列字符。像用双引号括起来的一个单词、名字或句子。例如,下面是C++中的字符串:

"Problem Solving" "C++" "Programming and " "."

一个串必须完整的打印在一行上,例如,下面串

"This string is invalid because it

is typed on more than one line."

是无效的,因为它分裂成了两行。

引号不属于串的部分,而只是简单用于把串与C++程序的其它部分区分开来。

一个不包含字符的串被称为空串。我们使用两个双引号来写空串,双引号中间不包含任何字符(甚至不包含空格):

""

空串不等于空格串;空串是不包含字符的特殊串。

实验三 自下而上语法分析及语义分析

实验三自下而上语法分析及语义分析 一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验内容 根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。 对于正确的表达式,给出表达式的值。 对于错误的表达式,给出出错位置。 四、实验方法 采用LR分析法。 首先给出S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。 接下来给出LR分析表。 然后程序的具体实现: ●LR分析表可用二维数组(或其他)实现。 ●添加一个val栈作为语义分析实现的工具。 ●编写总控程序,实现语法分析和语义分析的过程。 注:对于整数的识别可以借助实验1。 五、文法定义 简单的表达式文法如下: E->E+T|E-T|T T->T*F|T/F|F F->(E)|i 上式中,i 为整数。 六、处理程序例 例1: 正确源程序例: 23+(45+4)* 40分析结果应为:正确的表达式。其值为:1983 例2: 错误源程序例: 5+(56+)-24 分析结果应为:错误的表达式:出错位置为)

附录:源程序 #include #include"string.h" #include using namespace std; #define R 30 #define C 20 typedef struct elem { char e[4]; }Elem; //ACTION表与GoTo表中的元素类型 Elem LR[R][C]; //存放ACTION表与GoTo表中的内容 typedef struct out { int order; //序号 int state[10]; //状态栈 char sign[30]; //符号栈 char grasen[20]; //产生式 char input[30]; //输入串 char explen[50]; //解释说明 }OutNode; //输出结果中每一行的类型 OutNode out[20]; //存放输出结果 char Sentence[20]; //存放文法的一个句子 char GramSent[10][20]; //存放文法的一组产生式

语义语法

仗剑独行编辑 为了能够在网络上进行更好的传输,首先将每幀图像划分为NAL单元,为了提高压缩率及错误处理能力提出了RBSP编码算法。 nal_unit(NumBytesInNALunit){//NumBytesInNALunit规定了NAL单元的大小forbidden_zero_bit nal_ref_idc//nal_ref_idc如果不为0,说明NAL单元的内容包含一个序列参数集或一个图像参数集,或一个参考图像条带,或一个参考图像的条带数据分割。 nal_unit_type//指明含在NAL单元中的RBSP数据结构的类型 NumBytesInRBSP=0 for(i=1;i

语义分析

三、词法、语法、语义分析结合 一、实验目的与要求 在实现词法、语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法,并完成相关语义分析器的代码开发。 二、实验内容 语法制导翻译模式是在语法分析的基础上,增加语义操作来实现的。对于给定文法中的每一产生式,编写相应的语义子程序。在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,以便完成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。每个语义子程序需指明相应产生式中各个符号的具体含义,并规定使用该产生式进行分析时所应采取的语义动作。这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。 输入:包含测试用例,如由无符号数和+、?、*、/、(、)构成的算术表达式的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。若源程序中有错误,应指出错误信息。 三、实验设计 语法制导翻译模式实际上是对前后文无关文法的一种扩展。一般而言,首先需要根据进行的语义工作,完成对文法的必要拆分和语义动作的编写,从而为每个产生式都配备相应的语义子程序,以便在进行语法分析的同时进行语义解释。要求从编译器的整体设计出发,重点通过对实验二中语法分析程序的扩展,完成一个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。 对文法G3[<算术表达式>]中的产生式添加语义处理子程序,完成无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。本实验只进行了算术表达式四元式的翻译。 四、源代码 1、在.h文件中添加了 //语义分析部分 #define PMAX 5//define 后面不加括号,定义产生式符号属性字符串的长度 int NXQ=0; /*全局变量NXQ用于指示所要产生的下一个四元式的编号*/ int NXTemp=1;//整型变量NXTemp指示临时变量的编号 int SentenceCount=1;//存放文件中句子的个数 struct QUATERNION /*四元式表的结构*/ { char op[PMAX]; /*操作符*/ char arg1[PMAX]; /*第一个操作数*/ char arg2[PMAX]; /*第二个操作数*/ char result[PMAX]; /*运算结果*/ }pQuad[256]; /*存放四元式的数组*/ char EBracket_Place[PMAX];//(E)的语义属性

TEST语法语义规则

TEST语言语法语义规则 程序中最后的声明必须是一个函数声明,名字为main。没有原型说明, 约定:主调函数的定义必须在被调函数的定义之前。 1.→{ fun_declaration } 2. → function ID’(‘‘ )’< function_body> 3.→main’(‘‘ )’ < function_body> 4.→ ‘{‘’}’ 5.→{} 6. →int ID; 7. | ε →{} 8.||| || | | < call _stat> 9. → if ‘(‘) [else < statement >] 10. → while ‘(‘’)’ < statement > 11. → for’(‘;;’)’ 12. →write ; 13. →read ID; 14. →’{‘’}’ 15. →< expression >;|; 16. < call _stat>→call I D’(‘’‘) 17. < expression >→ ID=| 18. -> |< additive_expr >(>|<|>=|<=|==|!=)< additive_expr > 19. < additive_expr>→{(+|-)< term >} 20. < term >→{(*| /)< factor >} 21. < factor >→’(‘< additive_expr >’)’|ID|NUM 有待扩充: 1.函数名、变量名都不可以重名。(有待修改:同一函数内部变量名不能相同,但不同函数的变量名可以相同,符号表的处理会更复杂) 2.考虑函数带返回值的情况; 3.考虑函数带参数的情况。

语法、语义和语用三个平面的联系与区别

语法、语义、语用三个平面的区别与联系 2004年北京语言大学对外汉语专业的考研题 近年来,国内外有些语言学家在语法研究中注意到区别三个不同的平面,即句法平面、语义平面和语用平面,这是语法研究方法上的新进展,有助于语法学科的精密化、系统化和实用化。但这样研究语法还仅仅是开始。如何在语法分析中,特别是在汉语的语法分析中全面地、系统地把句法分析、语义分析和语用分析既界限分明地区别开来,又互相兼顾地结合起来,这是摆在语法研究工作者面前的新课题,是值得进行深入探索的。 (一)语法研究中的句法平面,是指对句子进行句法分析。句中词语与词语(即符号与符号)之间有一定的关系,这种关系是属于句法的(Syntactic)。词语与词语按照一定的方式组合起来,构成一定的句法结构,对句法结构进行分析,就是句法分析。对句子进行句法分析,主要从两方面进行。 一方面,对句法结构内部的词语与词语之间的关系进行成分分析,也就是着眼于句子成分的确定和结构方式的判别。传统语法学进行语法分析时,总要把句子分为若干成分,如主语、谓语、宾语、定语、状语、补语等等,这些都是句法分析的术语。传统语法学分析一个句子,就是要分析句子里各类实词(包括名词、动词、形容词、数词、代词、副词等)充当什么句子成分。比如“张三批评了李四”,就得分析成主谓句,其中“张三”是主语,“批评了李四”是谓语,“批评”是谓语动词,“李四”是宾语。假如说成“李四被张三批评了”,也得分析成主谓句,

但这句里“李四”是主语,“被张三批评了”是谓语,“被张三”是介词短语作状语,“张三”是介词“被”的宾语,“批评”是谓语动词。这样的成分分析,讲什么词充当什么句子成分,都是着眼于句子结构分析出来的。与确定句子成分有联系的,就是结构类型的判别。结构类型决定于结构成分之间的关系,也就是决定于结构方式。比如“鸟飞”“身体健康”,是由主语和谓语两成分组成的,通常称为主谓结构;“飞鸟”“健康的身体”,是由定语和它的中心语两成分组成的,通常称为偏正结构;“读书”“建设祖国”,是由动词和它的宾语两成分组成的,通常称为动宾结构。研究一个组合体是什么结构,也是句法分析的重要内容。另一方面,对句法结构内部的词语与词语之间的层次关系进行分析,也就是着眼于句法结构的层次切分。这种层次分析,要求把句法结构中词语之间的关系分为直接关系和间接关系、内部关系和外部关系,也就是要句法结构的直接成分和间接成分以及内部成分和外部成分区别开来。例如“干大事的人”,这个句法结构里“干大事”和“人”之间是直接关系,“干”和“大事”之间也是直接关系,但“干”和“人”之间以及“大事”和“人”之间都是间接关系。又如“张三的哥哥批评了李四的弟弟”这个句子,进行层次分析,词语间的直接关系可图示如下: 三的哥哥批评了四的弟弟 直接关系直接关系 直接关系 直接关系 这个句子里“张三”与“批评”之间、“李四”与“批评”之间、“哥哥”与“李

编译原理课程设计(词法分析,语法分析,语义分析,代码生成)

编译原理课程设计(词法分析,语法分析,语义分析,代码 生成) #include #include #include #include #include #include using namespace std; /************************************************/ struct token// token { int code;// int num;// token *next; }; token *token_head,*token_tail;//token struct str// string { int num;// string word;// str *next; }; str *string_head,*string_tail;//string struct ivan// {

char left;// string right;// int len;// }; ivan css[20];// 20 struct pank// action { char sr;// int state;// }; pank action[46][18];//action int go_to[46][11];// go_to struct ike// { ike *pre; int num;// int word;// ike *next; }; ike *stack_head,*stack_tail;// struct L// { int k; string op;// string op1;// string op2;// string result;// L *next;// L *Ltrue;//true L *Lfalse;//false };

语法、语义、语用

语法、语义、语用的区别 (2012-12-23 22:38:32) 汉语是缺乏形态标志的语言,注重意合是汉语语法的一个主要特点。汉语的语序对语义的制约性很强,句法成分之间存在着较复杂的语义关系,在许多情况下仅对语法形式进行句法结构分析是解释不了句子的内部规律的。教学实践表明,让外国学生按照教材上所展示的句法结构模式去造句,他们有时会造出许多符合句法但不合情理也不能使用的句子来,究其原因,正是错在句子语义搭配和语用选择上。 句法、语义和语用这三个平面既有联系又有区别。句法是基础,语义和语用都要通过句法结构才能表现。句法结构中构成成分之间存在着诸如主谓、动宾、动补、偏正等句法关系意义,同时也存在着诸如动作与施事、受事、处所、工具等语义关系意义,还存在着诸如陈述、话题、焦点和预设、已知信息与新信息等语用意义。但是,句法、语义和语用实际上又处于不同平面上,它们之间并没有严格的对应。例如:“写文章”、“写毛笔”、“写黑板”,句法结构完全相同(动宾),但分别表达了“动作与结果”、“动作与工具”、“动作与处所”不同的语义关系;又如:“客人来了”与“来了客人”,两个句法结构的语义关系基本相同,“客人”与“来”都是“施事”与“动作”的关系,但句法关系分别是主谓和动宾。语用意义也不相同,前一个结构的“客人”是定指,表达已知信息,后一个结构的“客人”是非定指,表达新信息。更复杂一点的结构,如:①“床上躺着一个人”;②“那个人在床上躺着”;③“那个人躺在床上”;④“床上的那个人躺着”,这几个句子的句法结构关系各不相同,但语义关系基本相同,“人”、“床上”、“躺”之间都是“施事”、“处所”与“动作”的关系。 语法教学中进行语义分析,除了上述指出的句法成分间的语义规定性,即施事(主体)、受事与事(客体)、对象、处所、时间、结果、原因、目的、方式等之外,主要还是对语义指向的分析。由于汉语句法上的结合关系与语义的结合关系存在着不一致的现象,语义指向分析对理解句子的语义结构显得尤其重要。如:①“这些书我都看过了”;②“这本书我们都看过了”;③“这些书我们都看过了”。这三个句子中的“都”在句法上均与动词“看”结合,构成偏正关系,在语义上“都”的语义指向分别是①“这些书”(受事),②“我们”(施事),③在没有特定语境时,“都”所涉及的可以是“我们”,也可以是“这些书”,还可以是“我们”和“这些书”。再如:①“饭吃多了”。②“饭吃饱了”;③“饭吃快了”; ④“饭吃完了”。以上几例按照句法分析,它们的层次构造完全一样,但分析其语义指向,“多”指“吃的饭”多了,“饱”指吃饭的人“饱”了,“快”说明的是“吃”这一动作行为,而“完”既可以说明“饭”完了(即“饭吃光了”),也可以说明吃饭这一动作行为的结束。以上几个句法结构体,“多”“饱”“快”“完”都与“吃”是句法上的直接成分(动补),但语义结构上却有区别。④ 语法教学中的语用分析,是对语言现象的动态分析,指明其使用的条件和语境,以利于学生恰当地使用学过的句子去交际。⑤比如动词重叠式,主要表示“短时、尝试、轻微、少量”的意义,但在具体语言环境中,意义又有所侧重,有着不同的表达功能和限定条件。如为什么我们可以说“讨论这个问题”,但不能说“讨论讨论一个问题”呢?这是因为后一句违背了“动词重叠后,其宾语前带数量词作定语时,数量词须为确定的。”这样一条语用规则。 ⑥其他如:动词带补语时,不用重叠形式,所以不能说“我想想清楚再说”,“请把房间收拾收拾整齐。”又如,否定式陈述句不用动词重叠式,不能说“我不想去唱唱歌”。(但可以说“你怎么不去唱唱歌?”);动词做修饰限制语的成分时,也不能用重叠式,不能说“你试试的那件衣服很合身。”等等。类似这样的各种条件限制,对汉语为母语的人来说,一般

词法、语法、语义分析结合

词法、语法、语义分析结合 一、实验目的与要求 在实现词法、语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法,并完成相关语义分析器的代码开发。 二、实验内容 语法制导翻译模式是在语法分析的基础上,增加语义操作来实现的。对于给定文法中的每一产生式,编写相应的语义子程序。在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,以便完成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。每个语义子程序需指明相应产生式中各个符号的具体含义,并规定使用该产生式进行分析时所应采取的语义动作。这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。 输入:包含测试用例,如由无符号数和+、?、*、/、(、)构成的算术表达式的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。若源程序中有错误,应指出错误信息。 三、一般实现方法 语法制导翻译模式实际上是对前后文无关文法的一种扩展。一般而言,首先需要根据进行的语义工作,完成对文法的必要拆分和语义动作的编写,从而为每个产生式都配备相应的语义子程序,以便在进行语法分析的同时进行语义解释。要求从编译器的整体设计出发,重点通过对实验二中语法分析程序的扩展,完成一个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。 四、基本实验题目 题目:对文法G3[<算术表达式>]中的产生式添加语义处理子程序,完成无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。本实验只进行了算术表达式四元式的翻译。 五、源代码 *****************************词法分析.h文件 # include # include # include # include # include # define UNKNOWN -1 # define LB 0//左括号 # define RB 1//右括号 # define PL 2

编译原理实验三-自下而上语法分析及语义分析.docx

上海电力学院 编译原理 课程实验报告 实验名称:实验三自下而上语法分析及语义分析 院系:计算机科学和技术学院 专业年级: 学生姓名:学号: 指导老师: 实验日期: 实验三自上而下的语法分析 一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验内容

根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。 对于正确的表达式,给出表达式的值。 对于错误的表达式,给出出错位置。 四、实验方法 采用LR分析法。 首先给出S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。 接下来给出LR分析表。 然后程序的具体实现: ● LR分析表可用二维数组(或其他)实现。 ●添加一个val栈作为语义分析实现的工具。 ●编写总控程序,实现语法分析和语义分析的过程。 注:对于整数的识别可以借助实验1。 五、文法定义 简单的表达式文法如下: (1)E->E+T (2)E->E-T (3)E->T

(4)T->T*F (5)T->T/F (6)T->F (7)F->(E) (8)F->i 状态ACTION(动作)GOTO(转换) i + - * / ( ) # E T F 0 S5 S4 1 2 3 1 S6 S1 2 acc 2 R 3 R3 S7 S13 R3 R3 3 R6 R6 R6 R6 R6 R6 4 S 5 S4 8 2 3 5 R8 R8 R8 R8 R8 R8 6 S5 S4 9 3 7 S5 S4 10 8 S6 R12 S11 9 R1 R1 S7 S13 R1 R1 10 R4 R4 R4 R4 R4 R4 11 R7 R7 R7 R7 R7 R7 12 S5 S4 14 3 13 S5 S4 15 14 R2 R2 S7 S13 R2 R2 15 R5 R5 R5 R5 R5 R5 五、处理程序例和处理结果例 示例1:20133191*(20133191+3191)+ 3191#

语义语法与翻译表达

语义语法与翻译表达 在影响翻译表达的诸多因素中,首先遇到的莫过于对句中词汇意思的、对句子结构的分析,也就是语义和语法这两个方面。在翻译过程中这两个方面的问题解决得好,那么翻译的东西可以说基本上达到了"信"和"达"。至于"雅"的问题,它与译者的文笔修养及其他一些因素等联系甚紧,本文无意谈及。笔者只想从语义和语法的角度对翻译表达中出现的一些问题用实例加以分析,旨在证明语义和语法这两个因素在翻译表达中的重要性。 一、语义理解应准确 符号学的观点认为,一门语言就是一个系统,表达概念的词可以看作是系统中的实体,这些实体只有在系统中才有意义。这就是说词汇是静态的,句子是动态的。词汇只有置于句子才有意义,而只有根据句子乃至语篇来确定某个词汇的准确含义,才能真正达到翻译便是译意的目的。所以,语义的理解应力求准确。不仅要突出文字的表层意思,有的还必须译出其深层的涵义。这样译文表达才可能正确无误。可见理解准确是翻译准确的前提,否则便会译不达意,贻笑大方。现就语义理解的重要性以若干实例加以说明: 1. Health is above wealth, for this cannot give so much happiness as that. 译文:健康比财富更重要,因为财富不能像健康那样给人们带来幸福。 原句中this代替就近的名词,即wealth(财富),that代替较远的名词,即health(健康)。要把两个代词翻译成所代之名词才说得通。如果把this和that拘泥于表面原意译成"这个"和"那个",这样指代很不明确,放到译文中则让人不知所云。再如: There are two classes of people: the selfish and the selfless; these are respected, while those are looked down upon. 此句中的these指前面靠近的the selfless(忘我的人),those指较远的the selfish(自私的人)。所以全句应译成: 世上有两种人:自私者和忘我者;忘我的有受到尊敬,而自私的人则遭鄙视。 2. Men and nations working apart created these problems, men and nations working together must solve them. 译文:人与人之间以及国与国之间离心离德产生了这些问题:人与人之间以及国与国之间同心同德必定能解决这些问题。 句中men和nations都是复数。如果简单地译成"人们"和"国家"但不合原意,甚至被理解为人同国家之间离心离德和同心同德。故此,应在"人"和"国家"之后加上"之间",使句子不仅准确地表达了men和nations两个词在句中的深层含义,而且读起来也通顺。 3.He was astounded but highly pleased that the man who presided over the destinies of the mighty British Empire should come pleading to him. 译文:他又惊又喜,那位掌握着大英帝国命运的人居然来向他央求。 Should作为情态动词有"应该"的意思,但是当句子中有pity, surprise, shame, shock等表达说话人感情色彩的词时,从句中的should就往往被译成"居然","竟然"等,把说话人的同情、吃惊、羞怯、不满、赞叹、怀疑等感情表达出来。原文中有astounded和pleased表示惊喜的词,所以should应译民"居然",如果译成"应该",就错了。 4. Hairless Yunus has a few marbles missing because he is a wrestler. 译文:秃头尤诺斯是个角力士,他缺几个心眼。

语法和语义分析器

实验二语法和语义分析器 一实验目的 1.掌握 Yacc 的基本用法,并能够根据语言给出语法规则的定义,最后生成语言的解析器; 2.使用Yacc实现一个高级计算器程序。 二实验内容 实现一个简单的表达式计算器,要求能进行加、减、乘、除、幂运算,注意优先级。求写出详细的步骤和相应的flex源程序。 三实验步骤 1.在linux中安装flex,使用如下命令: Undo apt-lex install bison 2.实验源程序 %{ #define YYSTYPE double #include #include #include int yylex (void); void yyerror (char const *); %} %token NUM %left '-' '+' %left '*' '/' %% input: | input line ; line: '\n' | exp '\n' { printf ("\t%.10g\n", $1); } | error '\n' {yyerrok;} exp: NUM { $$ = $1; } | exp '+' exp { $$ = $1 + $3; } | exp '-' exp { $$ = $1 - $3; } | exp '*' exp { $$ = $1 * $3; } | exp '/' exp { $$ = $1 / $3; } | '(' exp ')' { $$ = $2; } ; %%

yylex () { int c; while ((c = getchar ()) == ' ' || c == '\t'); if (c == '.' || isdigit (c)) { ungetc (c, stdin); scanf ("%lf", &yylval); return NUM; } if (c == EOF) return 0; return c; } main () { return yyparse (); } yyerror(char *msg) { printf("error %s encountered\n", msg); }四实验结果 五实验内容中遇到的问题、解决方法和体会。 通过本次实验实现一个简单的表达式计算器,要求能进行加、减、乘、除运算,注意运算的优先级问题。掌握了Yacc 的基本用法,并能够根据语言给出语法规则的定义,最后生成语言的解析器。但在运行时出现了错误,经过同学帮助修改成功。

22词汇和语法的关系

第22讲词汇和语法的关系 词汇和语法之间有密切关系。 《孟子滕文公》:“舍皆取诸宫中而用之”中的“舍”,有人解释为疑问代词“什么”,王力先生认为是不对的,因为上古没有“疑问代词后面跟范围副词”这种句式,这是从语法上证明语义。很多古汉语字典把“适”解释为“往也”,这也是不对的,应该解释为“之也”。因为上古“往”是一个纯粹的内动词,“往”的目的地是不说出或不能说出的,如果需要说出目的地,则常常不用“往”而用其他动词如“之”“如”“就”等。如:庄辛去之赵。驱而之薛。屈完如師。而“适”后的目的地是必须说出的。如“适彼乐土。”所以,“适”和“往”是不同的。 这说明,语法和语义有密切的关系,不能抛开语法孤立地考察词义。 洪成玉《古汉语词义分析》(天津人民出版社,1985):“词具有两重性,既具有词汇属性,也具有语法属性。离开对词的语法属性的分析,就很难对一个词的意义做出正确的判断。”并举例:丘迟《与陈伯之书》:“将军勇冠三军,才为世出。”一些注本把“才为世出”解释为“才能是世界上杰出的”,这是错误的。因为古汉语中“出”是动词,单用时不做形容词,也尚未产生“杰出”的意义。“为”如理解为“是”,后面就要求名词或名词性词语,而这里却不是,所以,上句应理解为“才能为适应时代而生。”“为”是介词,“出”是动词。

这些例子说明了词汇和语法的关系:第一,一个词有某种词义,就必然会有相应的语法属性。因此,也就决定了它能进入某一种语法结构,和不能进入另一种语法结构。 第二,有时一个词的某种语法属性会使它区别于一些近义词,如“往”是内动词,“适”是外动词。 以上说明同一时代平面上词汇和语法的密切关系。从语言的历史发展看,词汇和语法也是相互影响的。 一、由语法关系而造成的词义变化 在语言的历史发展过程中,语法对词义变化的影响最明显地表现在下面一种事实上:有的词义的发展变化,是它长期处于某种语法位置造成的。“是”字的变化即属此类。这样的例子还有:1、为 古汉语“为”的基本用法是动词。但有时它可以放在疑问句的句尾。 《论语颜渊》:君子质而已矣,何以文为? 《论语季氏》:是社稷之臣也,何以伐为? 《庄子逍遥游》:奚以之九万里而南为? 《谷梁传定公十年》:两君合好,夷狄之民,何为来为? 对这种“为”字,有两种观点:疑问语气词(杨树达《词诠》) 动词,(王力《古代汉语》) 王力说:这样的句子,实际上是动词“为”的宾语“何”放在作状语的介词结构前面去了,意思是“用……做什么”。

现代汉语语法的五种分析方法

现代汉语语法的五种分析方法 现代汉语语法的五种分析方法是语法学基础里很重要的一个内容,老师上课也会讲到,我在这里把最简略的内容写在下面,希望能对2017汉硕考研学生的专业课学习有所帮助 详细阐释中心词分析法、层次分析、变换分析法、语义特征分析法和语义指向分析的具体内涵:了解更多的汉硕考研信息、资料加丹丹老师Q。依旧义乌散散刘思伊尔 一. 中心词分析法: 分析要点: 1.分析的对象是单句; 2.认为句子又六大成分组成——主语、谓语(或述语)、宾语、补足语、形容词附加语(即定语)和副词性附加语(即状语和补语)。 这六种成分分为三个级别:主语、谓语(或述语)是主要成分,宾语、补足语是连 带成分,形容词附加语和副词性附加语是附加成分; 3.作为句子成分的只能是词; 4.分析时,先找出全句的中心词作为主语和谓语,让其他成分分别依附于它们; 5.分析步骤是,先分清句子的主要成分,再决定有无连带成分,最后指出附加成分。 标记: 一般用║来分隔主语部分和谓语部分,用══标注主语,用——标注谓语,用~~~~~~标注宾语,用()标注定语,用[ ]标注状语,用< >标注补语。 作用: 因其清晰明了得显示了句子的主干,可以一下子把握住一个句子的脉络,适合于中小学语文教学,对于推动汉语教学语法的发展作出了很大贡献。 还可以分化一些歧义句式。比如:我们五个人一组。 (1)我们║五个人一组。 (2)我们五个人║一组。 总结:中心词分析法可以分化一些由于某些词或词组在句子中可以做不同的句子成分而造成的歧义关系。 局限性: 1.在一个层面上分析句子,层次性不强; 2.对于一些否定句和带有修饰成分的句子,往往难以划分;

实验三 自下而上语法分析报告及语义分析报告

实验三自下而上语法分析及语义分析一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验容 根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。 对于正确的表达式,给出表达式的值。 对于错误的表达式,给出出错位置。 四、实验方法 采用LR分析法。 首先给出S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。 接下来给出LR分析表。 然后程序的具体实现: ●LR分析表可用二维数组(或其他)实现。 ●添加一个val栈作为语义分析实现的工具。 ●编写总控程序,实现语法分析和语义分析的过程。 注:对于整数的识别可以借助实验1。

五、文法定义 简单的表达式文法如下: E->E+T|E-T|T T->T*F|T/F|F F->(E)|i 上式中,i 为整数。 六、处理程序例 例1: 正确源程序例: 23+(45+4)* 40分析结果应为:正确的表达式。其值为:1983 例2: 错误源程序例: 5+(56+)-24 分析结果应为:错误的表达式:出错位置为)

附录:源程序 #include #include"string.h" #include using namespace std; #define R 30 #define C 20 typedef struct elem { char e[4]; }Elem; //ACTION表与GoTo表中的元素类型 Elem LR[R][C]; //存放ACTION表与GoTo表中的容 typedef struct out { int order; //序号 int state[10]; //状态栈 char sign[30]; //符号栈 char grasen[20]; //产生式

句中语法意义和语义关系的联系与区别

句中语法意义和语义关系的联系与区别 【内容简介】语法意义也属于语义学中的语义,它是具体的语法结构表示出来的高度抽象的意义。论述句中的语义关系主要涉及相对具体的语义关系,有时涉及抽象的语义关系。有的句子(一个具体的语法结构)要根据语法理论约定俗成的规则、语义关系、语法规则与逻辑推理才能看出显性与隐性的语法关系,进而考察具体的语义关系理解句意。 任何语言,尤其现代世界上的语言,都不可能不存在语法,都要凭借语法构成句子。思维中的语义关系也通过语法表达出来才能进行交流。 语义是语言所表达的意义,是语言形式对现实世界进行编码时所对应的内容。在语言学内部,语言学各平面对句子完整释义的作用常称作该平面的“意义”,主要区分为词汇意义(即词项的意义)和语法意义,语法意义是语法结构的内容。语法结构形式表示的高度抽象的意义或意义关系都是从相对具体的语义或语义关系概括出来的,这些意义或意义关系构成语法意义知识系统成为语法理论的一个组成部分。语义或语义关系被抽象纳入语法意义系统就是被语法化了。语法化的目的是为了研究、学习、教授、掌握语言,使抽象化了的语言形成普遍的规律指导语言实践、达到交流思想的目的。语法意义借着语法形式(包括语法结构形式)表达出来,不存在没有形式的语法意义。存在于脑中没有用语法形式表达的高度抽象的语义、语义关系都不叫语法意义,尽管它们本质上与语法意义是完全相同的。语义结构也有形式和内容,但这套不同的形式系统所表达的语义、语义关系也不叫语法意义——虽然这些语义、语义关系有的与语法意义本质上是重叠的。相对具体的语义关系都不是语法意义,它们借着具体的句法

结构相对具体地表达出来或存在于脑中。 一个语言结构如果没有聚合性,那么,这个语言结构只能表示一个语义关系(无歧义时),只能表示一个相对具体的意思。这样的语言结构就不是语法结构。语法结构必须具有组合性和聚合性,语法结构在一定范围内就都具有普遍规律性。所以,语法结构所表示的语法关系具有高度抽象性。语义关系可以是具体的:Jim passed away yesterday.(吉姆昨天去世了。) 也可以是抽象的:to do things(做事情);technical innovations(技术的创新)。语法关系上,to do things表示“谓语动词-宾语”,technical innovations表示“修饰语-名词中心词”,就更抽象得多了。所以说语法意义具有高度的抽象性。语义关系抽象为语义结构里的“动作-受事”,这时的语义关系就与语法关系“谓语动词-宾语”重叠了。若语义结构的“动作-受事”改称(写)为“谓语动词-宾语”,就变成语法结构了。它们的说法不同,可以从语义的不同侧面互相补充说明,相得益彰,淋漓尽致,所以语法书上常常利用语义结构的说法来说明语法关系。语法意义的语法关系属于语义关系中的一部分。句法范围内的语法关系管高度抽象的语义关系部分,其他相对具体的语义关系部分称为“语义关系”,这是语句内“语法关系”与“语义关系”并举时的分工。 一个个具体的语法结构形式在一定的上下文或特定的情景下都表示一个个相对具体的语义关系。与语法关系一一对应的语法结构形式不能与相对具体的语义关系一一对应,因为前者是高度抽象的,后者是相对具体的,无法一一对应。一个具体的语法结构形式间接表示着一个具有高度抽象的语法关系,如“He likes sports.(他喜欢运动。)”代表着“主-动-宾(SVO)”这一个高度抽象的语法关系。具体的语法结构形式He likes sports同时直接表示了一个具体的语义

试论语法分析中句法语义语用的三位一体性

第27卷第6期 唐山师范学院学报 2005年11月 Vol. 27 No.6 Journal of Tangshan Teachers College Nov. 2005 ────────── 收稿日期:2005-05-31 作者简介:刘淑芬(1981-),河北唐山人,广西大学文化与传播学院2004级汉语言文字学研究生。 - 38 - 试论语法分析中句法、语义、语用的三位一体性 刘淑芬 (广西大学 文化与传播学院,广西 南宁 530004) 摘 要:在语法分析中要区分三个平面——句法平面、语义平面和语用平面,这三个平面是相互联系、相互制约、相互影响的,具有三位一体性。对句子进行语法分析时,要注意把握三个平面的三位一体性。从而使句子从静态分析达到动态分析,这也将对对外汉语语法教学有重大的指导意义。 关键词:“三个平面”理论;句法;语义;语用;三位一体性 中图分类号:H043 文献标识码:A 文章编号:1009-9115(2005)06-0038-03 语言是一种极其复杂的交际载体,一种极其复杂的符号体系。语言本身的特点决定了分析语言不可能在一个平面上 进行。 [1] 在进行语法分析和语法研究时既要区分句法、语义、语用三个不同平面,又要将三者有机结合起来的“三个平面理论”,是新时期汉语语法研究的热点之一。一个具体的句子,总是涉及到句法、语义、语用这三个不同的平面,对句子进行语法分析时必须同时进行句法分析、语义分析、语用分析才算最后达到语法分析的目的。如此才能使静态语法分析和动态语法分析相结合,达到全方位的语法分析,体现出三个平面的三位一体性。 语法研究的三个平面的理论,主张自觉地既明确区分又相互兼顾句法、语义、语用三个平面的理论。语法的三个平面都有自己的形式和意义:“句法、语义、语用的形式都是语法形式;句法、语义、语用的意义都是语法意义。”[2]句法平面的语法意义称为句法意义,指的是词语与词语结合组成句法结构后所产生或形成的显层的关系意义。语义平面的语法意义称为语义意义,简称语义,指的是词语和词语相互配合组成语义结构后所产生或形成的隐层的关系意义。语义只有在一定的语义结构中才能形成,因此词汇意义、逻辑意义、语境意义、社会文化意义等,不属于语法范畴的语义。语用平面的语法意义称为语用意义,指的是词语或句法结构体在语言实际使用中所产生或形成的语用价值或信息。语用意义往往体现着说话人的主观表达意向。 三个平面中,句法和语义是表里关系或显层和隐层的关系,这在抽象的句子结构里看得更为明显,句法结构同时也是语义结构的表现形式;而在具体的句子即交际中实际运用的句子中,语用成分或语用因素与句法结构和语义结构的成分之间的关系是信息和载体的关系、内层和外层的关系、客观和主观的关系。至于三者在语法分析中的价值,三个平面 有三种结构,也就会有句法成分、语义成分、语用成分,它们在具体的句子中是同时存在的,共同构成句子的要素,三者互相制约,相辅相成,缺一不可。不过由于着眼点和观察角度不同,研究中会有所侧重:“从说写角度看,句法是核心,是个轴。研究语法,要紧紧扣住句法,以句法为基础,向深层挖掘语义,向外层探求语用。”[2]因此,句子的语法分析应该是多角度、多层面的而不应该是孤立的。 在分析一个句子合法不合法时,一是要看句法上词语间结合得妥当不妥当;二是要看语义上词语搭配得合理不合理;三是要看语用上词语安排得适切不适切。凡符合妥当、合理、适切三个条件的句子,可以说是一个合法的、有效的句子,反之,可能是一个不合法的句子或是一个有语病的句子。由此可知,在对句子进行具体分析时,要求把句子放在交际的过程中观察,看语境对句子的语义和结构产生了什么影响,使句子发生了什么变化等等。采用静态的分析与动态的分析[3]相结合的方法,体现出三个平面的三位一体性。 例如:“门把风吹开。”这句话从句法上看虽符合“主语(门)+状语(把风)+动词(吹)+补语(开)”的格式;但从语义上看,此句违背了“把”字句的主语必须是施事,而介词“把”介引的对象应为受事的原则,同样让人不知所云;再从语用方面看,此句所传达的信息是不真实的,而且由于缺少语气词“了”则不能表达陈述确定的语气,使人觉得一句话没说完,因此是一个不合法的句子。如果转换成:“风吹开了门。”“风把门吹开了。”或“门被风吹开了。”无论从哪个平面上看都是合理合法的。而且,这三句的主语、施动者(或受动者)、主题三者是重合的,也就是说,句子的主语兼有句法、语义、语用三个平面的因素,因而三个平面之间的联系非常密切。但在有些情况下,主语、施事(或受事)、主题并不是等同的,例如:“今天,我们班的同学都

相关文档
最新文档