`
zhc0822
  • 浏览: 230573 次
  • 性别: Icon_minigender_1
  • 来自: 宝仔的奇幻城堡
社区版块
存档分类
最新评论

使用JavaScript构造C语言子集的编译器

阅读更多

jCompiler是我一年前完成的一个课程作业。目的是尝试为编程语言提供基于浏览器的编译器实现+骗取高分(这才是重点)。

实现的功能有:词法分析、语法分析、语法树生成(LL(1)文法)和中间代码生成(四元式)以及解释执行。
下面上图。


 

也许有人会有这样的疑问,为什么要用JavaScript来实现一个编译器?意义何在?
ok~答案是,JavaScript是我当时用得最熟练的编程语言...
这个玩意的研究价值应当大于它的实用价值。
它现在的最大的价值是为纠结于编译原理这门课的童鞋提供一个相对完善的编码实例。
也许在不久的将来,它会演变为一个云端的IDE。Who knows.

另外,水平所限,程序仅支持火狐和webkit浏览器。

 

附录——C语言子集定义

 

 

  1.          语言结构:顺序结构(赋值语句、输入、输出)、选择语句(if-else)、循环结构(while)。这些语句结构和C语言的结构一样,允许嵌套。
  2.          表达式局限于关系表达式和算术表达式,运算的优先级为:算术运算、关系运算,并服从左结合规则。
  3.          算术表达式包括整数和实数上的运算、变量以及“()”、“*”、“+”、“-”、“/”,运算符的优先级顺序为:“()”大于“*”和“/”大于“+”和“-”。
  4.          关系运算符包括:“<”、“==”、“<>”。
  5.          一条语句以“;”结束;程序由一条语句或者由“{”和“}”嵌套表达的复合语句。
  6.          注释放在“/*”“ */ ”之间,支持多行注释。
  7.          支持数组运算,数组的下标必须是正整数,使用“[”和“]”表示数组下标。
  8.          变量的使用之前需要先声明,声明的方式和C语言一样。
  9. 保留字

    特殊符号

    其他

    If

    +

    十进制的整数与实数

    else

    -

    while

    *

    read

    /

    标识符(由数字、字母和下划线组成的串,但必须以字母开头、且不能以下划线结尾的串)

    write

    =

    int

    real

    ==

     

     

    <> 

     

     

    (

     

     

                         )                    

     

     

    ;

     

     

    {

     

     

    }

     

     

    /*

     

     

    */

     

     

    [

     

     

    ]

     

     

 

 

  • 大小: 19.1 KB
分享到:
评论
9 楼 KJlmfe 2013-04-08  
readme.txt中说有docs文档,可是没有啊。如果你还有保存的话,发一份文档给我吧。

我的邮箱 kjlmfe在gmail
8 楼 zhc0822 2011-11-23  
ZeaLoVe 写道
好牛啊,最近刚看到用JavaScript实现JVM。。你可以尝试下。。

我也看到那个新闻了...一种膜拜的感觉
7 楼 ZeaLoVe 2011-11-23  
好牛啊,最近刚看到用JavaScript实现JVM。。你可以尝试下。。
6 楼 westice 2010-11-29  
在线IDE,不错!
5 楼 hpf1908 2010-11-29  
很不错,想起自己大学时写的C0编译器了
4 楼 EldonReturn 2010-11-27  
非常好的尝试。做前端开发的,对基础的如编译,汇编,性能分析有兴趣的人真的不多。
3 楼 zhc0822 2010-11-26  
jorneyR 写道
可以参考SableCC实现C语言的编译器。

当时参考的javaCC。感觉功能比较强大,啃起来有些吃力。
2 楼 jorneyR 2010-11-26  
可以参考SableCC实现C语言的编译器。
1 楼 草依山 2010-11-21  
有意思的东东

相关推荐

    cJSON 可以直接在linux,或 windows C/C++编译器下直接编译使用

    它基于JavaScript的一个子集,但并不依赖JavaScript的实现,因此可以在任何支持JSON的平台上使用。JSON格式通常用于在服务器和客户端之间传输数据,特别是在Web应用程序中。 ### cJSON的功能 cJSON库提供以下功能...

    xJson C语言的JSON解析源码!

    它是基于JavaScript的一个子集,但其实现是语言无关的,C语言当然也能处理JSON数据。`xJson`是一个专门为C语言设计的JSON解析器,特别适合在资源有限的环境中,如单片机上使用,因为它不依赖于复杂的内存管理API。 ...

    纯C语言编写的json库,可以进行json序列化和反序列化.zip

    它是基于JavaScript的一个子集,但其实与编程语言无关,因为有各种各样的库可以帮助不同语言解析和生成JSON格式的数据。在这个“纯C语言编写的json库,可以进行json序列化和反序列化.zip”压缩包中,包含的是一个名...

    使用 C++ 和 OpenGL ES 2 为 Android、iOS 和 Web 开发一个简单的空气曲棍球游戏_C语言_代码

    对于Web端,可能使用了Emscripten,这是一个LLVM到JavaScript的编译器,它可以将C++代码转换为可以在浏览器中运行的WebAssembly或JavaScript。这使得空气曲棍球游戏能够在WebGL兼容的浏览器中运行,WebGL是基于...

    Outrun:将Outrun从C转换为Javascript

    这个过程中,开发者可能使用了如Emscripten这样的工具,Emscripten是一个LLVM到JavaScript的编译器,能够将C和C++代码转换为可以在现代浏览器中运行的高效JavaScript代码。Emscripten的工作原理是先将C/C++代码编译...

    cjson使用例子,在vc6.0编译通过

    它的语法基于JavaScript的一个子集,但并不依赖JavaScript的实现。JSON数据结构主要包含对象(键值对)和数组(有序元素列表)。例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` **二、...

    Antlr-Practice:使用ANTLR编写词法分析器和解析器

    这个“Antlr-Practice”项目是针对ANTLR的实际应用,旨在帮助开发者学习如何使用ANTLR来编写针对C语言子集的词法分析器和解析器。 ANTLR的主要功能是将语言的文法规则转换为解析器,这些解析器能够读取源代码,将其...

    lbForth:自托管元编译的Forth,从几行C语言进行引导; 适用于Linux,Windows,ARM,RISC-V,68000,PDP-11,asm.js

    如ARM(广泛应用在移动设备和嵌入式系统中)、RISC-V(新兴的开源指令集架构)、68000(曾广泛应用于Macintosh早期计算机和其他嵌入式系统)、PDP-11(早期的迷你计算机)以及asm.js(JavaScript的一个子集,用于高...

    c代码-jsmn_test

    1. **C语言基础**:C语言是一种强大的、低级别的编程语言,常用于操作系统、编译器和嵌入式系统的开发。它的特点是速度快、效率高,但不支持高级语言的一些特性,如内置的面向对象编程。 2. **JSON(JavaScript ...

    json2txt:解压缩文件json

    它基于JavaScript的一个子集,格式简洁且易于读写,同时也易于机器解析和生成。在处理JSON数据时,有时我们需要将JSON文件转换为纯文本(TXT)文件,以便在不支持JSON的环境中使用或进行特定的文本分析。 "json2txt...

Global site tag (gtag.js) - Google Analytics