概述
Jerry 语言总体上来说是 C 语言的子集,满足 Jerry 语言的词法、语法、语义均满足 C 语
言,除了 IO 语句。
它没有 main 函数,而是从代码第一行开始,直到结束。它也不支持函数调用。
IO 语句并不是调用函数,使用这样的语句来进行 IO:
read x;
write x + 1;
其中 read 和 write 都是 Jerry 语言的关键字。
支持 if-else(else 可选)条件分支,while 循环语句,以及 break 跳出循环。
支持四则运算,正负号,比较运算,逻辑运算(“与”“或”运算支持条件短路)。
支持链式赋值。
以上各种运算、赋值的优先级与 C 语言一致。
支持多维数组但是不支持指针。
语句以分号结尾。允许空语句。
Jerry 语言将被编译成为二进制字节码,由 Jerry 虚拟机执行。
Jerry 语言中的关键字及作用
int / real
声明变量,前者声明整型变量,后者声明实型变量。
read / write
IO 操作,前者输入,后者输出。
if / else
分支语句使用的关键字,与 C 语言一样
while / break
循环语句使用的关键字,与 C 语言一样
数据类型
支持两种数据类型:整型(int)和实型(real),分别相当于 C 语言中的整型(int)和双精度浮点(double)。
词法
变量名称规则跟 C 语言一样。常数整数的形式是十进制数字序列,不支持十六进制或八进制数值。浮点数形式与 C 语言一致。
语法(EBNF)
# Jerry 语言
Jerry -> BasicBlock <END>
# 基本块
BasicBlock -> ε
BasicBlock -> Sentence BasicBlock
# 语句
Sentence -> <EOS>
Sentence -> IfElseBranch
Sentence -> WhileLoop
Sentence -> Declaration
Sentence -> <IO> Variable <EOS>
Sentence -> Assignment <EOS>
Sentence -> <BREAK> <EOS>
Sentence -> <LBRACE> BasicBlock <RBRACE>
# if-else 分支
IfElseBranch -> <IF> <LPARENT> Assignment <RPARENT> BasicBlock ElseBlock
ElseBlock -> <ELSE> BasicBlock
ElseBlock -> ε
# while 循环
WhileLoop -> <WHILE> <LPARENT> Assignment <RPARENT> BasicBlock
# 声明
Declaration -> <TYPE> VariableRegister <EOS>
VariableRegister -> VariableRegister <COMMA> Variable Initialization
VariableRegister -> Variable Initialization
Initialization -> <ASSIGN> Assignment
Initialization -> ε
# 运算相关
# 赋值
Assignment -> Condition <ASSIGN> Assignment
Assignment -> Condition
# 逻辑运算
Condition -> Condition <OR> ConjunctiveCondition
Condition -> ConjunctiveCondition
ConjunctiveCondition -> NegativeCondition
ConjunctiveCondition -> ConjunctiveCondition <AND> NegativeCondition
NegativeCondition -> <NOT> Comparison
NegativeCondition -> Comparison
# 比较运算
Comparison –> Comparison <COMPARATOR> Expression
Comparison -> Expression
# 表达式
Expression -> Expression <OP_MUL_DIV> Term
Expression -> Term
#项
Term –> UnaryFactor
Term -> Term <OP_PLS_MNS> UnaryFactor
# 一元因子, 可能有正负号
UnaryFactor -> SimpleFactor
UnaryFactor -> <OP_PLS_MNS> SimpleFactor
# 简单因子
SimpleFactor -> <INTEGER>
SimpleFactor -> <REAL>
SimpleFactor -> Variable
SimpleFactor -> <LPARENT> Assignment <RPARENT>
# 变量(包括数组下标等信息)
Variable -> <IDENT> Dimensions
Dimensions -> <LBRACKET> Assignment <RBRACKET> Dimensions
Dimensions -> ε
语义限制
break 必须在 while 循环内,且仅跳出当前循环。
比较运算得出的是整型数,为真时值为 1,否则为 0。
整型数或表达式可以为逻辑条件。实型数或表达式不可以为条件。
数组声明时,每一维必须显示给出大小。对数组进行初始化仅对其第一内存单元进行初始化。
赋值的左部及 read 的参数必须是变量引用(这一条非语法限制)。
分享到:
相关推荐
《编译器构造:C语言描述》这本书深入浅出地介绍了这些步骤,不仅涵盖了理论基础,还提供了丰富的实例和练习,帮助读者通过实践掌握编译器设计的关键技术。书中可能包括编译器前端的设计,如词法分析器和语法分析器...
编译器、编译器构造,用C语言来描述
C 编译器原理是计算机科学中的重要概念,它涉及到将高级语言编写的源代码转换成计算机可执行的机器码。对于程序员来说,理解编译器的工作原理有助于提高编程效率和解决编译错误。以下是对C编译器原理的详细说明: 1...
该书通过模块化的方式,将编译器的设计和实现任务分解为多个模块,并且在每个模块中均衡地对待编译的动作和数据方面。在自动化方面,该书的作者利用属性文法来提供对语义分析、高效代码生成和汇编的统一处理。此外,...
编译器的构造编译原理 本文将详细介绍编译器的构造原理,从源代码到可执行文件的整个过程。编译器是一个复杂的系统,涉及到多个步骤和技术。下面我们将逐一介绍编译器的每个步骤。 1. 源代码文件 编译器的第一个...
C语言是一种广泛使用的通用编程语言,其编译器的设计与构造具有重要的实践意义。C语言编译器通常具备以下特点: 1. **高效性**:C语言编译器旨在生成高效的机器代码,以便提高程序运行速度。 2. **可移植性**:...
《编译系统设计赛(华为毕昇杯) - Raspberry Pi 4B 目标平台的编译器构造与编译优化》 在信息技术领域,编译器是将高级语言源代码转换为机器可执行代码的关键工具。华为毕昇杯编译系统设计赛,聚焦于Raspberry Pi 4B...
使用诸如Flex和Bison之类的编译器编译器进行编译的指南。 使用这两种工具,您可以专注于编译器的概念,而无需从头开始构建编译器。
编译器前端构造工具是构建...总结来说,这篇论文深入探讨了编译器前端的构造,特别是JLUCC的实现,展示了如何利用现有的工具和理论来构建一个高效且灵活的编译器框架,这对于理解编译器设计原理和实践具有很高的价值。
"java编译器,解释器构造实践"这一主题深入探讨了这两个关键组件的构建过程及其在软件开发中的作用。以下是相关知识点的详细说明: 1. **Java编译器**(Javac):Java程序首先通过Javac编译器将源代码(.java文件)...
《中山大学编译原理课程与编译器构造实验3详解》 在计算机科学领域,编译原理是一门至关重要的课程,它深入探讨了程序语言如何转化为机器可理解的形式。中山大学的这门编译原理课程,通过实际的实验项目帮助学生...
用LEX构造数控编译器词法分析程序的研究_陈辉.caj用LEX构造数控编译器词法分析程序的研究_陈辉.caj用LEX构造数控编译器词法分析程序的研究_陈辉.caj用LEX构造数控编译器词法分析程序的研究_陈辉.caj用LEX构造数控...
编译系统设计赛(华为毕昇杯)_-_Raspberry_Pi_4B_目标平台的编译器构造与编译优化_compiler
本项目“基于C++自制小型C编译器”旨在让学生和爱好者理解编译器的工作原理,并通过实践提升对编程语言的理解。下面我们将深入探讨这个项目的各个层面,包括编译器的基本概念、C++作为实现语言的原因、数据集的作用...
Louden的编译器构造原理和实践》是一本深入探讨编译器设计与实现的专业书籍,作者是计算机科学领域的专家Kenneth C. Louden。这本书籍主要面向对编译器技术感兴趣的程序员、计算机科学学生以及软件工程师,旨在通过...
【异构粗粒度可重构处理器的自动任务编译器框架设计】 在当前的计算机科学领域,异构计算已经成为提升系统性能和效率的关键技术之一。异构粗粒度可重构处理器(Heterogeneous Course-Grained Reconfigurable ...
### Java编译器的实践 《现代编译器的Java实现(第二版)》这本书提供了丰富的实例和深入的解析,指导读者如何从零开始设计并实现一个完整的Java编译器。书中不仅覆盖了编译器的各个阶段,还详细介绍了如何利用Java...
下面我们将详细讨论编译器的基本概念、编译器的构造过程以及C++作为实现工具的优势。 首先,编译器是将源代码(源语言,如C++、Java)翻译成目标代码(机器语言或字节码)的软件。它们是程序开发过程中的关键环节,...
### 使用JavaCC构造编译器的方法 #### 一、引言 编译器不仅是高级程序语言所需的工具,很多时候我们也会面临需要自己设计编译器的情况。例如,在设计一个美化源代码打印工具、自动插入调试输出信息的程序或者是...