精华内容
下载资源
问答
  • 自制编程语言基于C语言郑钢源代码
  • 郑钢《自制编程语言》随书源码及读书笔记
  • 自制编程语言》学习笔记 本仓库内容 《自制编程语言》源码src/sparrow.tgz 《自制编程语言》读书笔记docs/* 《自制编程语言》样章阅读reference/自制编程语言-样章.pdf等 相关站点 GitBook访问地址:...

    《自制编程语言》学习笔记

    本仓库内容

    • 《自制编程语言》源码 src/sparrow.tgz
    • 《自制编程语言》读书笔记 docs/*
    • 《自制编程语言》样章阅读 reference/自制编程语言-样章.pdf等

    相关站点

    Something I hope you know before go into the coding~
    First, please watch or star this repo, I'll be more happy if you follow me.
    Bug report, questions and discussion are welcome, you can post an issue or pull a request.
    

    参考书目

    1534912827483.png

    内容简介

    该书全面从脚本语言和虚拟机介绍开始,讲解了词法分析的实现、一些底层数据结构的实现、符号表及类的结构符号表,常量存储,局部变量,模块变量,方法存储、虚拟机原理、运行时栈实现、编译的实现、语法分析和语法制导自顶向下算符优先构造规则、调试、查看指令流、查看运行时栈、给类添加更多的方法、垃圾回收实现、添加命令行支持命令行接口。

    该书旨在用C语言完成一个简单的脚本语言(A object-oriented script language)。

    编程语言用C,编译环境x86

    基础开发环境

    1. 宿主操作系统采用CentOS 6.8
    2. 编译器Gcc版本 gcc version 4.4.7 20120313(高版本可能需要解决编译问题,看下面常见问题解决)

    《自制编程语言》目录

    常见问题

    1. 编译报错
    vm/core.o:在函数‘primObjectIs’中:
    /root/github/sparrow/src/c4/b/vm/core.c:103:对‘getClassOfObj’未定义的引用
    vm/core.o:在函数‘primObjectType’中:
    /root/github/sparrow/src/c4/b/vm/core.c:129:对‘getClassOfObj’未定义的引用
    collect2: error: ld returned 1 exit status
    makefile:9: recipe for target 'spr' failed
    make: *** [spr] Error 1
    

    解决方法:

    修改makefile文件,在CFLAGS中添加-fgnu89-inline

    CC = gcc
    #CFLAGS = -g -DDEBUG -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headers
    CFLAGS = -g -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headers -fgnu89-inline
    TARGET = spr
    DIRS =  object include cli compiler parser vm gc  
    CFILES = $(foreach dir, $(DIRS),$(wildcard $(dir)/*.c))
    OBJS = $(patsubst %.c,%.o,$(CFILES))
    $(TARGET):$(OBJS)
    	$(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
    clean:
    	-$(RM) $(TARGET) $(OBJS)
    r: clean $(TARGET)
    

    修改过后必须先make clean一下,你应该知晓makefile是根据时间撮判断,那么先前编译通过的,但是并没有报错不会再次编译,毕竟你也没有改过源码文件,时间撮也没有变。

    那么如何批量替换呢??考验shell脚本编程功底,一句话搞定式

    find . -name "makefile" | xargs perl -pi -e 's/-Wsystem-headers/-Wsystem-headers -fgnu89-inline/g'
    

    1535422644606.png

     

     

    之后便可在高版本gcc中编译,本人使用的版本是gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) 运行在Ubuntu 18.04.1 LTS x64

     

    展开全文
  • 自制编程语言 基于c语言郑钢 书中代码,可以直接编译运行 详细可看 https://blog.csdn.net/cmqwan/article/details/84530925
  • 自制编程语言-基于c语言 自2015年3月以来,本月C编程语言首次取代Java ,成为Tiobe编程语言流行度指数中最受欢迎的语言。 Tiobe猜测COVID-19大流行可能是C上升的背后。 Tiobe承认这种大流行可能只是许多原因之一,...

    自制编程语言-基于c语言

    20153月以来,本月C编程语言首次取代Java ,成为Tiobe编程语言流行度指数中最受欢迎的语言。 Tiobe猜测COVID-19大流行可能是C上升的背后。

    Tiobe承认这种大流行可能只是许多原因之一,但他说某些语言可能会由于该病毒而呈上升趋势。 C和C ++越来越受欢迎,因为它们被用于医疗设备,而数据科学中使用的Python和R在从中寻找病毒解毒剂时受益匪浅。

    [ 同样在InfoWorld上:为什么C编程语言仍会统治 ]

    C可以保持头把交椅吗? Tiobe首席执行官Paul Jansen认为C可以保持领先地位至少半年,因为他认为在不久的将来没有任何市场趋势会青睐Java。 Tiobe Index使用诸如Google,Bing和Yahoo之类的搜索引擎来估计与每种语言有关的熟练工程师,课程和第三方供应商的数量。

    2020年5月Tiobe指数前10名:

    1. C,17.07%
    2. Java,16.28%
    3. Python,9.12%
    4. C ++,6.13%
    5. C#,占4.29%
    6. Visual Basic,4.18%
    7. JavaScript,2.68%
    8. PHP,占2.49%
    9. SQL,2.09%
    10. R,1.85%

    竞争对手Pypl编程语言受欢迎程度指数分析了在Google中搜索语言教程的频率,并在2020年5月的前10名中列出了以下几种语言:

    1. Python,31.17%
    2. Java,17.75%
    3. JavaScript,占7.99%
    4. C#,7.05%
    5. PHP,占6.09%
    6. C / C ++,5.67%
    7. R,3.93%
    8. Objective-C,2.4%
    9. 斯威夫特(2.26%)
    10. TypeScript,1.89%

    翻译自: https://www.infoworld.com/article/3541579/c-programming-language-rises-with-covid-19.html

    自制编程语言-基于c语言

    展开全文
  • 编译《自制编程语言 基于c语言》 郑钢 书中代码

    编译《自制编程语言 基于c语言》 郑钢 书中代码

    之前挖的坑,既然有一些小哥有很多问号,今天过来把这个坑填上

    编译器

    1. 之前用IDEA习惯了,这边就用jb公司的同类编译器CLion
    2. 这个有个好处,就是他里面自带编译环境,不用单独下载其他东西了
    3. 安装就用默认的,下一步下一步就好
    4. 地址: https://www.jetbrains.com/clion/ 或者qq群文件上下载(1046848140)

    代码获取

    正规途径

    1. 根据书中地址获取源码
    2. 把最后的CMakeLists文件和main.c补上

    其他途径

    1. csdn资源下载 : 自制编程语言 基于c语言郑钢 书中代码,可以直接编译运行

    2. qq群文件上下载,包括编译器也有 1046848140

    运行

    hello world

    请直接按照这个步骤操作,搞个hello world出来,确认你的环境是可以运行c语言的

    1. CMakeLists.txt 和 main.c 这两个文件,复制到c2同级目录下面
    2. 然后打开项目 stepByStep
    3. 打开main.c,应该会有个绿色小箭头,单击,run
    4. 看到有hello world,起码你的环境是可以的了

    运行你的代码

    1. 运行书里的代码,按照我那个注释来就好
    2. 要运行c2模块/或者其中某个小模块的代码,那就把cmake中这些类的注释打开
    3. c2-f对应的是下面这些文件
    #include_directories(c2/f/cli)
    #include_directories(c2/f/include)
    #include_directories(c2/f/vm)
    #include_directories(c2/f/parser)
    
    #        c2/f/cli/cli.c
    #        c2/f/cli/cli.h
    #        c2/f/include/common.h
    
    #       c2/f/include/utils.c
    #        c2/f/include/utils.h
    #        c2/f/vm/vm.c
    #        c2/f/vm/vm.h
    #        c2/f/vm/core.c
    #        c2/f/vm/core.h
    
    #       c2/f/include/unicodeUtf8.c
    #       c2/f/include/unicodeUtf8.h
    #       c2/f/parser/parser.c
    #       c2/f/parser/parser.h
    
    
    1. reload一下cmake文件
    2. 把 main.c 中的main函数改成其他名字,如果有多个main函数,运行起来报错
    3. 找到 c2/f/cli/cli.c 中的main函数,将文件地址改成对应的
    int main(int argc, const char** argv) {
       if (argc == 1) {
           runFile("/Users/lizhao/workdir/code/c/liz/c2/sample.sp");
    //       runFile("D:\\workdir\\lizhao\\code\\c\\liz\\c2\\sample.sp");
       } else {
          runFile(argv[1]);
       }
       return 0;
    }
    
    1. 运行就好

    其他模块

    1. 就不多说了,能运行代码,后面瞎搞瞎搞都能运行起来了

    相关过程图片

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    相关地址

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.12)
    project(stepByStep)
    
    set(CMAKE_C_STANDARD 99)
    
    include_directories(.)
    
    #include_directories(c2/f/cli)
    #include_directories(c2/f/include)
    #include_directories(c2/f/vm)
    #include_directories(c2/f/parser)
    
    
    #include_directories(c2/cli)
    #include_directories(c2/include)
    #include_directories(c2/vm)
    #include_directories(c2/parser)
    
    #include_directories(c3/cli)
    #include_directories(c3/include)
    #include_directories(c3/vm)
    #include_directories(c3/parser)
    #include_directories(c3/object)
    
    #include_directories(c4/cli)
    #include_directories(c4/compiler)
    #include_directories(c4/include)
    #include_directories(c4/vm)
    #include_directories(c4/parser)
    #include_directories(c4/object)
    
    #include_directories(c6/cli)
    #include_directories(c6/compiler)
    #include_directories(c6/include)
    #include_directories(c6/vm)
    #include_directories(c6/parser)
    #include_directories(c6/object)
    
    #include_directories(c8/cli)
    #include_directories(c8/compiler)
    #include_directories(c8/include)
    #include_directories(c8/vm)
    #include_directories(c8/parser)
    #include_directories(c8/object)
    
    add_executable(stepByStep main.c
    
                  #  c2/f/cli/cli.c
                #    c2/f/cli/cli.h
               #     c2/f/include/common.h
    
              #     c2/f/include/utils.c
               #     c2/f/include/utils.h
               #     c2/f/vm/vm.c
            #        c2/f/vm/vm.h
          #          c2/f/vm/core.c
             #       c2/f/vm/core.h
    #
         #         c2/f/include/unicodeUtf8.c
                #   c2/f/include/unicodeUtf8.h
            #       c2/f/parser/parser.c
         #          c2/f/parser/parser.h
    
    
            #        c2/cli/cli.c
            #        c2/cli/cli.h
            #        c2/include/common.h
            #
            #        c2/include/utils.c
            #        c2/include/utils.h
            #        c2/vm/vm.c
            #        c2/vm/vm.h
            #        c2/vm/core.c
            #        c2/vm/core.h
            #
            #        c2/include/unicodeUtf8.c
            #        c2/include/unicodeUtf8.h
            #        c2/parser/parser.c
            #        c2/parser/parser.h
    
            #        c3/cli/cli.c
            #        c3/cli/cli.h
            #        c3/include/common.h
            #
            #        c3/include/utils.c
            #        c3/include/utils.h
            #        c3/vm/vm.c
            #        c3/vm/vm.h
            #        c3/vm/core.c
            #        c3/vm/core.h
            #
            #        c3/include/unicodeUtf8.c
            #        c3/include/unicodeUtf8.h
            #        c3/parser/parser.c
            #        c3/parser/parser.h
            #
            #        c3/object/header_obj.c
            #        c3/object/header_obj.h
            #        c3/object/class.c
            #        c3/object/class.h
            #        c3/object/obj_fn.h
            #        c3/object/obj_string.h
            #        c3/object/obj_string.c
            #        c3/object/meta_obj.c
            #        c3/object/meta_obj.h
            #        c3/object/obj_fn.c
            #        c3/object/obj_list.c
            #        c3/object/obj_list.h
            #        c3/object/obj_range.c
            #        c3/object/obj_range.h
            #        c3/object/obj_map.c
            #        c3/object/obj_map.h
            #        c3/object/obj_thread.c
            #        c3/object/obj_thread.h
    
            #        c4/cli/cli.c
            #        c4/cli/cli.h
            #        c4/include/common.h
            #
            #        c4/include/utils.c
            #        c4/include/utils.h
            #        c4/vm/vm.c
            #        c4/vm/vm.h
            #        c4/vm/core.c
            #        c4/vm/core.h
            #
            #        c4/include/unicodeUtf8.c
            #        c4/include/unicodeUtf8.h
            #        c4/parser/parser.c
            #        c4/parser/parser.h
            #
            #        c4/object/header_obj.c
            #        c4/object/header_obj.h
            #        c4/object/class.c
            #        c4/object/class.h
            #        c4/object/obj_fn.h
            #        c4/object/obj_string.h
            #        c4/object/obj_string.c
            #        c4/object/meta_obj.c
            #        c4/object/meta_obj.h
            #        c4/object/obj_fn.c
            #        c4/object/obj_list.c
            #        c4/object/obj_list.h
            #        c4/object/obj_range.c
            #        c4/object/obj_range.h
            #        c4/object/obj_map.c
            #        c4/object/obj_map.h
            #        c4/object/obj_thread.c
            #        c4/object/obj_thread.h
            #        c4/compiler/compiler.c
            #        c4/compiler/compiler.h
    
    #        c6/cli/cli.c
    #        c6/cli/cli.h
    #        c6/include/common.h
    #
    #        c6/include/utils.c
    #        c6/include/utils.h
    #        c6/vm/vm.c
    #        c6/vm/vm.h
    #        c6/vm/core.c
    #        c6/vm/core.h
    #
    #        c6/include/unicodeUtf8.c
    #        c6/include/unicodeUtf8.h
    #        c6/parser/parser.c
    #        c6/parser/parser.h
    #
    #        c6/object/header_obj.c
    #        c6/object/header_obj.h
    #        c6/object/class.c
    #        c6/object/class.h
    #        c6/object/obj_fn.h
    #        c6/object/obj_string.h
    #        c6/object/obj_string.c
    #        c6/object/meta_obj.c
    #        c6/object/meta_obj.h
    #        c6/object/obj_fn.c
    #        c6/object/obj_list.c
    #        c6/object/obj_list.h
    #        c6/object/obj_range.c
    #        c6/object/obj_range.h
    #        c6/object/obj_map.c
    #        c6/object/obj_map.h
    #        c6/object/obj_thread.c
    #        c6/object/obj_thread.h
    #        c6/compiler/compiler.c
    #        c6/compiler/compiler.h
    
    #        c8/cli/cli.c
    #        c8/cli/cli.h
    #        c8/include/common.h
    #
    #        c8/include/utils.c
    #        c8/include/utils.h
    #        c8/vm/vm.c
    #        c8/vm/vm.h
    #        c8/vm/core.c
    #        c8/vm/core.h
    #
    #        c8/include/unicodeUtf8.c
    #        c8/include/unicodeUtf8.h
    #        c8/parser/parser.c
    #        c8/parser/parser.h
    #
    #        c8/object/header_obj.c
    #        c8/object/header_obj.h
    #        c8/object/class.c
    #        c8/object/class.h
    #        c8/object/obj_fn.h
    #        c8/object/obj_string.h
    #        c8/object/obj_string.c
    #        c8/object/meta_obj.c
    #        c8/object/meta_obj.h
    #        c8/object/obj_fn.c
    #        c8/object/obj_list.c
    #        c8/object/obj_list.h
    #        c8/object/obj_range.c
    #        c8/object/obj_range.h
    #        c8/object/obj_map.c
    #        c8/object/obj_map.h
    #        c8/object/obj_thread.c
    #        c8/object/obj_thread.h
    #        c8/compiler/compiler.c
    #        c8/compiler/compiler.h
    
            )
    
    

    main.c

    #include <stdio.h>
    
    //int mainaa() {
    // 测试程序cmake能否运行,打开这个。
    // 如果要运行上面模块的代码,就把这个方法名称改成 main方法名字改成其他的,
    int maina() {
        printf("Hello, World!\n");
        return 0;
    }
    
    

    重点

    百年不更新的公众号,欢迎关注: 小王老店

    展开全文
  • 自制编程语言-基于c语言的源码,源代码是在linux平台下开发的,修改了一些代码,移植到windows平台下面,vs2013编译通过,算是给windows平台下的朋友提供一点福利
  • 最近「懒编程」公众号文章发布的很少,正如其名,懒~编程嘛。虽然文章发布的少了,但自己的视频更新却勤快了起来。在上篇文章中,提到了自己希望将我自制编程语言的过程通过视频的形式录制下来,将自...

    最近「懒编程」公众号文章发布的很少,正如其名,懒~编程嘛。

    虽然文章发布的少了,但自己的视频更新却勤快了起来。

    在上篇文章中,提到了自己希望将我自制编程语言的过程通过视频的形式录制下来,将自制编程语言的经验分享给大家,让大家可以在这个过程少走一些弯路。

    现在视频来啦!

    视频会优先更新到Youtube,然后会同步到B站(晚上一些),目前更新了3个视频,编写代码的视频其时长都比较长。

    欢迎上youtube食用,https://youtu.be/xqcd6hZD6MY

    如果无法科学上网,那可以上B站找,https://www.bilibili.com/video/BV1LZ4y1T7Gn/

    其实,自制编程语言从来不是件困难的事情,任何知识在这个时代,都可以从互联网上获得,无非就是有些内容需要付费而已,其实付费是好的习惯,只要你认为自己的注意力>时间>金钱,付费就是很自然的选择。

    我自己在自制ToyPL编程语言的过程「大量的」参考了很多前辈、大佬的资料、文章以及视频,感谢这些大佬。

    最后希望跟公众号里久关不弃的大家一同学习技术,一同畅游在知识的海洋。

    展开全文
  • Go语法树入门-开启自制编程语言和编译器之旅! Go语言QQ群:102319854,1055927514 光谷码农课堂: ://study.163.com/provider/480000001914454/index.htm 凹语言(凹读音“ Wa”)(Wa编程语言): : 蚂蚁金服招聘...
  • 自制编程语言和虚拟机,这是一个看似很深奥的课题,也涉及当今互联网流行的主题,许多技术人员对其心驰神往,但要领悟其精髓步履维艰。 《自制编程语言》循序渐进、由浅到深地讲解了丰富的基础知识,覆盖了常见的...
  • 创造一门编程语言,只需要一些C语言基础,一些正则表达式,加上不断思索的大脑就可以做到。设计的语言具备四则运算、变量、条件分支、循环、函数定义、垃圾回收等功能,最终版本则可以支持面向对象、异常处理等高级...
  • 基于c语言自制编程语言 代码

    千次阅读 2019-01-25 22:09:07
    代码来源于《基于c语言,自制变成语言》 作者:郑钢 第二章讲的就是词法分析器parser的代码,我已经放到github上了,有时间的话会继续写接下来的代码 https://github.com/hao297531173/DIYProgramLanguage 使用...
  • 起初按照书里的说明来搭建Windows下的环境,卡在下载和编译正则表达式库“鬼车”的...还是各种问题编译不过(或许我机器是Win7的原因),后来参考了“往事已疯”的《用msys2编译《自制编程语言》代码》(http://ww...
  • 两周自制脚本语言这本书,可以做为了解编译原理的入门书籍,当然其内容是远远不够的,毕竟在大学里编译原理可是要学一整个学期的。说是入门书籍,但是对于新手而言,两周想弄懂也是不够的,里面很多内容很跳跃,我...
  • 例如 anbna^nb^nanbn 不能用正则语言描述,但可以用上下文无关语言描述 上下文无关语法cfg,就是由终结符,非终结符,产生式和开始符号组成的语法。 {wcw∣w∈(a∣b)∗}\{wcw | w \in (a|b)^{*}\}{wcw∣w∈(a∣b)∗...
  • 上一篇我们说到了函数及内联函数的实现,进一步验证了本方案的可行性,本篇我们来继续具象化该项目 本项目是本人Ordinary项目的一部分,其目标是作为一门与.net无缝集成也可与.net完全独立的可视化编程语言,可运行...
  •  1.2 自制编程语言并不是很难  1.3 本书的构成与面向读者  1.4 用什么语言来制作  1.5 要制作怎样的语言 // ==属于比较,=属于赋值,跟本书后面的右序相关 文中有一些关于分析树的内容,相较于llc的...
  • (怒)自制编程语言

    2018-01-15 15:04:56
    对于这方面的资料,我实在是看不下去了,真是让人非亲自动手不可。上场yacc和lex,满口os和汇编,这让人...至于我为什么这么想……是因为我在接触python前还接触过另一门语言——scheme——这可能导致了我奇怪的思维...
  • 自制编程语言CXScript(一) 总括

    千次阅读 2017-07-25 08:18:37
    在山(chen)重(mi)水(zhao)复(huan)疑(shi)无(xia)路(gu)即将断稿的...这里不是要开发一款颠覆世界、改变思维的编程语言,而是为了做一款比较“小学生”的编程语言。 比如我希望能这么描述计算菜价:
  • 我做过一个编程语言:mylang 开始 做编程语言最基础的就是常量折叠部分 那么先看一下mylang中的常量折叠部分 def _cal(t,a,b,inter): A = copy.deepcopy(a) B = copy.deepcopy(b) _a = comp(a) _b = comp(b) if...
  • 我做过一个编程语言:mylang 开始 上代码 def split_subBlocks(block): subBlocks = [] cnt = 0 buf = '' flag = False for i in block: if(i == '{'): cnt += 1 flag = True elif(i == '}'):
  • 我做过一个编程语言:mylang 开始 上代码 def parse_try(block): error = '''traceback: {0}''' subBlocks = split_subBlocks(block) if(subBlocks[0] == 'error'): return subBlocks flag = None flag2 = True
  • 我做过一个编程语言:mylang 开始 上代码 def block_parse(block): global blockSta s = block.split('\n')[0] if(s.startswith('for(') and s.endswith('){')): blockSta.push('for') res = parse_for(block)
  • 我做过一个编程语言:mylang 开始 其实应该先将if,但是为了保持"先讲解单分支结构,后讲多分支结构"的理念,把if过了 源代码 def parse_while(block): global status try: foo = block.split('\n')[0][6:-2] ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 501
精华内容 200
关键字:

自制编程语言