jCompiler是我一年前完成的一个课程作业。目的是尝试为编程语言提供基于浏览器的编译器实现+骗取高分(这才是重点)。
实现的功能有:词法分析、语法分析、语法树生成(LL(1)文法)和中间代码生成(四元式)以及解释执行。
下面上图。
也许有人会有这样的疑问,为什么要用JavaScript来实现一个编译器?意义何在?
ok~答案是,JavaScript是我当时用得最熟练的编程语言...
这个玩意的研究价值应当大于它的实用价值。
它现在的最大的价值是为纠结于编译原理这门课的童鞋提供一个相对完善的编码实例。
也许在不久的将来,它会演变为一个云端的IDE。Who knows.
另外,水平所限,程序仅支持火狐和webkit浏览器。
附录——C语言子集定义
-
语言结构:顺序结构(赋值语句、输入、输出)、选择语句(if-else)、循环结构(while)。这些语句结构和C语言的结构一样,允许嵌套。
-
表达式局限于关系表达式和算术表达式,运算的优先级为:算术运算、关系运算,并服从左结合规则。
-
算术表达式包括整数和实数上的运算、变量以及“()”、“*”、“+”、“-”、“/”,运算符的优先级顺序为:“()”大于“*”和“/”大于“+”和“-”。
-
关系运算符包括:“<”、“==”、“<>”。
-
一条语句以“;”结束;程序由一条语句或者由“{”和“}”嵌套表达的复合语句。
-
注释放在“/*”“ */ ”之间,支持多行注释。
-
支持数组运算,数组的下标必须是正整数,使用“[”和“]”表示数组下标。
-
变量的使用之前需要先声明,声明的方式和C语言一样。
-
保留字
|
特殊符号
|
其他
|
If
|
+
|
十进制的整数与实数
|
else
|
-
|
while
|
*
|
read
|
/
|
标识符(由数字、字母和下划线组成的串,但必须以字母开头、且不能以下划线结尾的串)
|
write
|
=
|
int
|
<
|
real
|
==
|
|
|
<>
|
|
|
(
|
|
|
)
|
|
|
;
|
|
|
{
|
|
|
}
|
|
|
/*
|
|
|
*/
|
|
|
[
|
|
|
]
|
|
- 大小: 19.1 KB
分享到:
相关推荐
它基于JavaScript的一个子集,但并不依赖JavaScript的实现,因此可以在任何支持JSON的平台上使用。JSON格式通常用于在服务器和客户端之间传输数据,特别是在Web应用程序中。 ### cJSON的功能 cJSON库提供以下功能...
它是基于JavaScript的一个子集,但其实现是语言无关的,C语言当然也能处理JSON数据。`xJson`是一个专门为C语言设计的JSON解析器,特别适合在资源有限的环境中,如单片机上使用,因为它不依赖于复杂的内存管理API。 ...
它是基于JavaScript的一个子集,但其实与编程语言无关,因为有各种各样的库可以帮助不同语言解析和生成JSON格式的数据。在这个“纯C语言编写的json库,可以进行json序列化和反序列化.zip”压缩包中,包含的是一个名...
对于Web端,可能使用了Emscripten,这是一个LLVM到JavaScript的编译器,它可以将C++代码转换为可以在浏览器中运行的WebAssembly或JavaScript。这使得空气曲棍球游戏能够在WebGL兼容的浏览器中运行,WebGL是基于...
这个过程中,开发者可能使用了如Emscripten这样的工具,Emscripten是一个LLVM到JavaScript的编译器,能够将C和C++代码转换为可以在现代浏览器中运行的高效JavaScript代码。Emscripten的工作原理是先将C/C++代码编译...
它的语法基于JavaScript的一个子集,但并不依赖JavaScript的实现。JSON数据结构主要包含对象(键值对)和数组(有序元素列表)。例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` **二、...
这个“Antlr-Practice”项目是针对ANTLR的实际应用,旨在帮助开发者学习如何使用ANTLR来编写针对C语言子集的词法分析器和解析器。 ANTLR的主要功能是将语言的文法规则转换为解析器,这些解析器能够读取源代码,将其...
如ARM(广泛应用在移动设备和嵌入式系统中)、RISC-V(新兴的开源指令集架构)、68000(曾广泛应用于Macintosh早期计算机和其他嵌入式系统)、PDP-11(早期的迷你计算机)以及asm.js(JavaScript的一个子集,用于高...
1. **C语言基础**:C语言是一种强大的、低级别的编程语言,常用于操作系统、编译器和嵌入式系统的开发。它的特点是速度快、效率高,但不支持高级语言的一些特性,如内置的面向对象编程。 2. **JSON(JavaScript ...
它基于JavaScript的一个子集,格式简洁且易于读写,同时也易于机器解析和生成。在处理JSON数据时,有时我们需要将JSON文件转换为纯文本(TXT)文件,以便在不支持JSON的环境中使用或进行特定的文本分析。 "json2txt...