
编译原理
int_Brosea
CS and CS
展开
-
python | 编译原理,语法分析——LR(1)文法实现
LR(1)文法的意思是从左向右扫描,最右推导,往前多看一个字符。LR(1)文法也需要构造要给预测分析表,但是LR(1)的的预测分析表有两部分,分别是action表和goto表。action表的横坐标是不同的状态标号,纵坐标是不同的终结符,goto表的横坐标也是不同状态标号,纵坐标是不同的非终结符。action表中有si、rj、acc和空白,其中si表示推进至状态i,将当前输入符号和状态i入栈,rj按第j个产生式进行规约,栈首弹出,利用产生式生成,入栈,转移状态也同时入栈。acc表示接受,即算法结束。空原创 2020-05-09 17:27:49 · 4436 阅读 · 3 评论 -
python | 编译原理,语法分析——LL(1)文法实现 下
最近要交实验报告了,不然这个LL1文法的博客可能还要好久才能想起来补全这个下篇。前面实现了LL(1)文法的求first集和follow集,也求出来了预测分析表。现在我们的任务就是进行左右一项——利用预测分析表对文法进行预测。《编译原理(第3版)》(陈意云等编著)这本书里把用预测分析表进行预测的方法用伪代码写了出来,我写在下方。ip是一个标记输入读入的指针,a是ip所指的那个输入的字符。让ip指向w $的第一个符号令X等于栈顶符号while(X != $) { /*栈非空*/ if(X是a)原创 2020-05-08 18:46:01 · 2021 阅读 · 0 评论 -
python | 编译原理,语法分析——LL(1)文法实现 中
上一个文章实现了对LL(1)文法各非终结符求first集和follow集,我们这篇文章则是继续求得LL(1)的预测分析集。看一下预测分析集的求解方法:这里我们需要求对于一个串的first集,求解方法如下:任意符号α的FIRST集求法:1. α为终结符,则把它自身加入FIRSRT(α)2. α为非终结符,则:(1)若存在产生式α->a...,则把a加入FIRST(α),其中a可以...原创 2020-03-08 17:51:56 · 2215 阅读 · 0 评论 -
python | 编译原理,语法分析——LL(1)文法实现 上
前置文法处理我们在做语法分析的时候会可以利用自上而下的分析方法,那么其中LL(1)文法就是其中一个分析方法。在实现之前我们需要知道LL(1)文法有以下局限性:不能处理左递归。产生式集合中不能有公共左因子。这两个地方我就不在代码中实现了,给出公式,大家自己先把自己的文法改成LL(1)文法然后再进行下面的python实现过程。消除左递归:A→Aα⇒{A→β∣A′A′→αA′∣ϵA ...原创 2020-03-07 01:22:15 · 3114 阅读 · 3 评论