编程语言的语法与语义
Chapter 1
SPECIFYING SYNTAX
Language provides a means of communication by sound and written symbols. Human beings learn language as a consequence of their life experiences, but in linguistics-the science of languages-the forms and meanings of languages are subjected to a more rigorous examination. This science can also be applied to the subject of this text, programming languages. In contrast to the natural languages, with which we communicate our thoughts and feelings, programming languages can be viewed as artificial languages defined by men and women initially for the purpose of communicating with computers but, as importantly, for communicating algorithms among people.
语言以声音和文字符号的形式提供交流的渠道。人类一般通过生活的体验习得语言,但是在作为一门科学的语言学中,语言的形式和及其含义必须被严格考究(rigorous examination)。同样的科学对待当然也被应用到本书的主题--编程语言。和自然语言用以交流想法和感觉不同,编程语言可被看成是一个人工语言,起初定义为为了人机交流,不过现在更重要的是为了在程序员之间交流程序算法。
Many of the methods and much of the terminology of linguistics apply to programming languages. For example, language definitions consist of three components:
语言学的很多方法和术语应用于编程语言。比如,语言定义的三个部分:
1. Syntax refers to the ways symbols may be combined to create well-formed sentences (or programs) in the language. Syntax defines the formal relations between the constituents要素 of a language, thereby providing a structural description of the various expressions that make up legal strings in the language. Syntax deals solely with the form and structure of symbols in a language without any consideration given to their meaning.
语法指用字符组合成合法语句的规则集(KEMIN:字符先通过词法组词或字串,再由代表不同句子成分的词组合成语句)。语法定义语言的各种要素间的形式关系(KEMIN:什么要素,什么关系?),因此给出了语言中各种不同的合法的语句的结构描述。语法只关注句法结构,不管其含义,那是语义的事。
2. Semantics reveals透露 the meaning of syntactically valid strings in a language. For natural languages, this means correlating sentences and
phrases with the objects, thoughts, and feelings of our experiences. For programming languages, semantics describes the behavior that a computer follows when executing a program in the language. We might disclose揭露 this behavior by describing the relationship between the input and output of a program or by a step-by-step explanation of how a program will execute on a real or an abstract machine.
语义指定一条合法语句的含义。对自然语言来说,短语和语句的含义指相关的对象、思想和经验感觉;而对编程语言来说,语义描述了计算机执行一个程序时所表现的行为。揭示语义的行为包括描述程序输入输出之间的关系,逐步解说程序如何在真实或抽象机器的执行过程等。(KEMIN:语义都需要某种实现的。而计算机实际行为,如逻辑运算、给内存保存数据等实现了编程语言的抽象语义)(KEMIN:在这里,语义的存在及重要性是无可非议的了,问题还不清楚它与算法过程有什么关系。)
3. Pragmatics alludes to those aspects of language that involve the users of the language, namely psychological and sociological phenomena such as utility, scope of application, and effects on the users. For programming languages, pragmatics includes issues such as ease of implementation, efficiency in application, and programming methodology.
语用涉及了语言使用者的各种方面的内容,包括心理学上、社会学现象,比如语言的实用性、应用范围和对使用者的作用。对编程语言来说,语用问题指实现的简易性、应用的效率和编程方法论。
Syntax must be specified prior to semantics since meaning can be given only to correctly formed expressions in a language. Similarly, semantics needs to be formulated before considering the issues of pragmatics, since interaction with human users can be considered only for expressions whose meaning is understood. In the current text, we are primarily concerned with syntax and semantics, leaving the subject of pragmatics to those who design and implement programming languages, chiefly compiler writers. Our paramount goal is to explain methods for furnishing装备 a precise definition of the syntax and semantics of a programming language.
语法必须先于语义给出,因为只能给正确形式的表达式指定含义;同样,语义也需要明确后才考虑语用问题,因为使用者只有明白表达式的含义后才能使用语言进行交流。本书主要讲述语法和语义,语用部分留给语言的设计者和实现者,一般是编译器开发人员。我们的第一目标就是解释装备(furnishing)一个编程语言的语法和语义的精确定义的方法。
We begin by describing a metalanguage for syntax specification called BNF. We then use it to define the syntax of the main programming language employed in this text, a small imperative language called Wren. After a brief look at variants of BNF, the chapter concludes with a discussion of the abstract syntax of a programming language.
我们先介绍描述语法规范的一种元语言——BNF(巴克斯-诺尔范式)。我们用它来定义本书选用的语言Wren的语法,Wren是种很小的命令式语言。在概览BNF的变种后,我们总结编程语言的抽象语法。
At the simplest level, languages are sets of sentences, each consisting of a finite sequence of symbols from some finite alphabet. Any really interesting language has an infinite number of sentences. This does not mean that it has an infinitely long sentence but that there is no maximum length for all the finite length sentences. The initial concern in describing languages is how to specify an infinite set with notation that is finite. We will see that a BNF grammar is a finite specification of a language that may be infinite.
参考
分享到:
相关推荐
本项目专注于使用Java实现词法、语法和语义分析器,这些都是编译器设计与实现的核心部分。以下是关于这些知识点的详细说明: **词法分析器(Lexer或Tokenizer)** 词法分析器是编译器的第一步,它将源代码分解成一...
#### 4.2 形式语义与离散数学的关系 形式语义的研究往往依赖于离散数学的概念和技术。例如,在定义操作语义时,可能会用到关系运算、函数映射等概念;而在描述代数语义时,则需要用到代数结构的知识。 ### 五、结论...
在编程语言的世界里,词法、语法和语义分析是构建编译器或解释器时不可或缺的步骤。这些概念构成了编译原理的核心,是将人类可读的源代码转化为计算机可执行指令的基础。下面,我们将深入探讨这三个关键知识点。 1....
LET 模型的时间语义编程语言 LET 模型的时间语义编程语言是近年来实时系统领域的研究热点之一。实时系统的正确性不仅取决于逻辑正确性,还取决于时间正确性。然而,现有的编程语言缺乏显示表达系统时间属性的语法...
语法分析是编译器的第一步,它负责检查源代码是否符合特定编程语言的语法规则。这一过程通常由词法分析器(也称为扫描器)和解析器共同完成。词法分析器将源代码分解为一个个独立的符号或“标记”(tokens),这些...
语法分析紧接着词法分析,其目的是根据编程语言的语法规则(通常表示为上下文无关文法)来构建抽象语法树(AST)。这个过程验证标记流是否符合预定的语法结构。在C语言中,这包括检查括号匹配、声明和表达式的正确性...
在本文中,我们将深入探讨这三种分析方法,并结合C语言实现的四元式生成,来理解它们在编程语言处理中的作用。 首先,词法分析(也称为扫描或词法分解)是编译过程的第一步。它将源代码文本分解成一个个有意义的...
1. C++ : C++ 或 CPP 是一种通用的静态类型面向对象的编程语言。1979 年,一位名叫 Bjarne Stroustrup 的丹麦...Objective-C 是一种通用的、面向对象的编程语言,它添加了面向对象语言的语法和语义,它的行为类似于
语法分析,也称为解析(Parser),是对词法分析生成的标记流进行结构分析,以确定其是否符合编程语言的语法规则。这个过程通常由上下文无关文法(Context-Free Grammar,CFG)来描述。解析器可以使用递归下降解析、...
在实际应用中,词法、语法和语义分析器的设计和实现是复杂而细致的工作,需要对编程语言理论有深入的理解。李盼2009119030同学的这个项目无疑是一个很好的实践机会,可以帮助他/她深入理解编译器内部的工作原理,...
函数式编程语言如Lisp、Haskell和OCaml等,它们的语法和语义都深受λ演算的影响。在这些语言中,函数被视为一等公民,可以作为其他函数的参数或返回值。函数式编程强调纯函数、无副作用和递归,这些都是λ演算特性在...
本课程设计主要涵盖了编译原理中的关键部分——布尔表达式的语法分析与语义分析。在编译原理中,布尔表达式是计算机语言中常见的一种表达形式,它涉及到逻辑运算符(如AND、OR、NOT)以及关系运算符(如==、!=、<、>...
编译原理是计算机科学中的一个重要领域,它研究如何将高级编程语言转换为机器可以理解的低级语言,即机器码。这个过程分为几个关键阶段,包括词法分析、语法分析和语义分析,它们共同构成了编译器的核心部分。 **...
《语法与语义分析》是编译原理课程中的重要内容,主要涉及如何解析并理解源代码的结构和含义。在编译器设计中,语法分析和语义分析是两个关键步骤。 1. **文法定义**:文法G由四个部分组成,即终结符号集VT、非终结...
词法分析、语法分析与语义分析是编译原理中的三个关键步骤,它们构成了将高级语言转换为机器可执行代码的基础。在这个课程设计中,我们将深入理解这些概念,并通过源码实现来加深理解。 词法分析,也称为扫描或标记...
在计算机科学领域,编译器设计是一门至关重要的课程,其中语法分析和语义分析是编译器构建的核心环节。...通过深入学习和实践,我们可以更好地理解和构建编译器,从而高效地处理各种编程语言的源代码。
- **修改 Semantic Highlighting 配置颜色**:与语法高亮类似,语义高亮也可以自定义颜色。但语义 token 的 scope 更加复杂,可能包含诸如 `variable`, `type`, `function.member`, `enum.value` 等,允许更加细腻...
通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法. 实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 实验的...