美文网首页
编译原理实验,词法分析,LL(1),LR(1)

编译原理实验,词法分析,LL(1),LR(1)

作者: _千寻瀑_ | 来源:发表于2018-06-18 21:49 被阅读0次

代码在https://github.com/xuan45/Compiler-Principle
记得点个star哦

Introduction

编译原理实验

  • 词法分析器和LL(1)文法核心代码均采用C++实现,服务端代码使用Koa2实现,前端可视化代码使用React实现
    js作为胶水层(node-ffi)将c++运行的结果转发给前端,数据格式使用json
  • LR(1)文法我用的是JavaScript,原因是我做LL(1)文法的时候,要把预测分析表可视化出来,这样去拼接json字符串给nodejs太麻烦了
    于是我就用了JavaScript,便于可视化图表等,而且数据结构也比C++好用

使用

npm install 安装依赖
npm run server 开启服务端
npm run dev 开启react开发
npm start 同时启动server和dev

环境:

windows10 + vs2015 + nodejs-v8.9.3

  • ffi引用dll库时参考的文章
  • ffi引入函数名错误参考的文章
  • 编译dll的时候,在CompilersPrinciplesDll.cpp文件里面引入iostream, string等头文件报错,将头文件引入至stdafx.h即可解决
  • ffi里面的string类型对应c++是char* 类型的,而我需要使用string,直接使用string无法获取参数和结果,所以写了个函数转换
  • 其实可以不用ffi的,但是要安装c++编译器,利用child_process.exec去执行cpp文件,然后利用exec返回的子进程进行管道通信
// char* 可直接赋值给string
// string 转 char*,用来返回结果给nodejs
char* to_char_pointer(string str) {
    int length = (int)str.length();
    char *p = new char[length + 1];
    for (int i = 0; i < length; ++i) {
        p[i] = str[i];
    }
    p[length] = '\0'; //加上结束符
    return p;
}

效果预览

  • 词法分析

词法分析我是利用循环来实现自动机匹配标识符,数字等等


image.png
  • LL(1)

LL的关键在于求出first集和follow集,求first集的时候要注意消除左递归,然后根据first集和follow集求出预测分析表


image.png
  • LR(1)


    image.png

相关文章

  • 编译原理实验,词法分析,LL(1),LR(1)

    代码在https://github.com/xuan45/Compiler-Principle记得点个star哦 ...

  • 基于JAVA实现的基于DFA的词法分析程序

    1 实验目的 根据自己确定的正规表达式,编写、调试一个词法分析程序,对语句进行词法分析,从而更好理解词法分析原理。...

  • Linux环境下的针对PL0语言的语法词法语义分析

    摘 要 此次编译原理课程设计,我利用flex工具进行PL/0语言的词法分析、自己用C++语言实现了LR语法分析、语...

  • 2018-09-07

    编译原理 Ch1 概念 编译程序 编译程序由八部分组成: 词法分析程序 语法分析程序 语义分析程序 中间代码生成程...

  • 你不知道的JavaScript —— 作用域是什么

    1.1 编译原理 传统编译步骤 分词/词法分析(拆分成一个个词法单元)——>解析/语法分析(词法单元流转化为抽象语...

  • 1 Nodejs01 预学

    1、计算机语言、编程/程序语言的区别:词法分析、语法分析、语义分析;-> 底层涉及编译原理 (1).计算机能接受的...

  • Java常见面试题汇总-----------JVM专题(JVM编

    32、JVM编译器优化 32.1、JVM编译的过程   1、解析与填充符号表过程  1)、词法、语法分析  词法分...

  • 编译原理->词法分析

    词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法...

  • 作用域

    1.作用域是什么? 1.1 编译原理 分词/词法分析,将字符组成的字符串分解成有意思的代码块,这些代码块称为词法单...

  • 第一章作用域是什么

    1.1 编译原理 编译语言 分词/词法分析 解析/语法分析 代码生成 对于Javascript来说,大部分情况发生...

网友评论

      本文标题:编译原理实验,词法分析,LL(1),LR(1)

      本文链接:https://www.haomeiwen.com/subject/bvcoeftx.html