编译原理 #02# 简易递归下降分析程序(js实现)

时间:2022-04-27 02:24:30

// 实验存档

截图:

编译原理 #02# 简易递归下降分析程序(js实现)

代码:

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title></title>
<link href="https://fonts.googleapis.com/css?family=Noto+Serif+SC" rel="stylesheet">
<style>
main {
/*对子元素开启弹性布局*/
display: flex;
/*弹性元素在必要的时候换行*/
flex-wrap: wrap;
/*将弹性元素居中*/
justify-content: center;
} textarea,
button {
font-family: 'Noto Serif SC', STFangSong, serif;
font-size: 17px;
}
</style>
</head> <body>
<main>
<textarea name="input" rows="20" cols="40"></textarea>
<textarea name="output" rows="20" cols="40"></textarea>
<button name="execute">Execute</button>
</main> <script>
let inputBox = document.querySelector("textarea[name=input]");
let outputBox = document.querySelector("textarea[name=output]");
let btnExecute = document.querySelector("button[name=execute]"); btnExecute.addEventListener("click", event => {
startAnalyzing(inputBox.value);
}); /*
对下列文法,用递归下降分析法对任意输入的符号串进行分析:
(1)E->eBaA
(2)A->a|bAcB
(3)B->dEd|aC
(4)C->e|dC
输入一以#结束的符号串,例如eadeaa#为合法符号串
*/ function startAnalyzing(s) {
str = s;
cur = 0;
E();
outputBox.value = str + "为合法符号串!";
} function E() { // E->eBaA#
match('e');
B();
match('a');
A();
match('#');
} function A() { // A->a|bAcB
if (str[cur] === 'a') {
match('a');
} else if (str[cur] === 'b') {
match('b');
A();
match('c');
B();
} else {
report("存在语法错误,字符位置为:" + cur);
}
} function B() { // B->dEd|aC
if (str[cur] === 'd') {
match('d');
E();
match('d');
} else if (str[cur] === 'a') {
match('a');
C();
} else {
report("存在语法错误,字符位置为:" + cur);
}
} function C() { // C->e|dC
if (str[cur] === 'e') {
match('e');
} else if (str[cur] === 'd') {
match('d');
C();
} else {
report("存在语法错误,字符位置为:" + cur);
}
} function match(ch) {
if (cur < str.length && str[cur] === ch) ++cur;
else report("存在语法错误,字符位置为:" + cur);
} function report(s) {
outputBox.value = s;
throw new Error(s);
}
</script>
</body> </html>

编译原理 #02# 简易递归下降分析程序(js实现)的更多相关文章

  1. 作业十一——LL&lpar;1&rpar;文法的判断,递归下降分析程序

    作业十一——LL(1)文法的判断,递归下降分析程序 判断是否为LL(1)文法 选取有多个产生式的求select,只有一条产生式的无需求select 同一个非终结符之间求交集,全部判断为空后则为LL(1 ...

  2. 编译原理之LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  3. 编译原理:LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  4. 十一次作业——LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  5. LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da | ε (3)B -> cC (4)C -> aADC | ε (5)D -> b | ε 验证文法 G ...

  6. 第十一次作业 LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  7. 第十一次 LL&lpar;1&rpar;文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  8. 【编译原理】TEST递归下降演示

    MyUtil.java package Util; import Value_Final.RRule; public class MyUtil { /** * 判断字符串是否是关键字 * @param ...

  9. 编译原理实验之SLR1文法分析

    ---内容开始--- 这是一份编译原理实验报告,分析表是手动造的,可以作为借鉴. 基于  SLR(1) 分析法的语法制导翻译及中间代码生成程序设计原理与实现1 .理论传授语法制导的基本概念,目标代码结 ...

随机推荐

  1. 使用XStream解析MXL文件用到的jar包---xpp3&lowbar;min-1&period;1&period;3&period;4&period;O&period;jar和xstream-1&period;3&period;1&period;jar

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

  2. CentOS7 监控进程网络流量工具安装

    服务器在做测试的时候,需要监控网络流量,用来了解在不同人数的时候服务器的网络使用量. 我们使用服务器环境是centos7,centos下通常使用iftop,或者nethogs来进行网络流量监控.这2个 ...

  3. 实战之中兴ZXHN F460光猫破解超级密码&plus;开启无线路由功能

    本文面向小白用户,即使你不懂电脑看完你也会破解光猫,网上有些文章的操作方法是错误的.按照我这篇文章,只要型号对,那么肯定没问题!电信光纤入户,家里用的是电信送的中兴查看 ZXHN F460 中的全部文 ...

  4. sublime 工具构建

    1 Sublime Text 3 配置react语法校验 原文地址:https://segmentfault.com/a/1190000004369542?_ea=585496 终端安装 npm in ...

  5. 【Jetlang】一个高性能的Java线程库

    actor  Jetlang 提供了一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用. .net的MS CCR ...

  6. hibernate&plus;mysql 8小时问题

    在生产环境中使用了 自带的连接池 结果 遇到 mysql8小时问题 然后 采用了 c3p0 连接池 hibernate 版本 4.3.6 c3p0版本 0.9.5-pre10 ps:hibernate ...

  7. Automatic Preferred Max Layout Width is not available on iOS versions prior to 8&period;0

    今天在真机调试低版本系统的时候出现如题类似Layout Max Width在ios 8 之前不适用的问题, 初步估计是autolayout 所导致的 查找资料解决方法如下: 将label下Preffe ...

  8. ubuntu 使用sudo apt-get update 出现 被配置多次导致无法升级错误解决方法

    这个周六周末在考虑升级自己GPU开发机,在琢磨使用docker来配置tensorflowGPU环境,在升级软件的时候爆出了如下错误 在 /etc/apt/sources.list.d/sogoupin ...

  9. VC下防止反汇编的办法(1)

    最近在看IDA的书,讲汇编语言的部分提到了一种防止递归向下汇编器逆向程序的方法 这里esp指向栈顶,也就是调用方最后入栈的返回地址.然而实际在VC2017里用内联汇编这么做是不行的,原因可以看看VC生 ...

  10. centos-0 基础

    netstat -nap #会列出所有正在使用的端口及关联的进程/应用kill -9 1777        #杀掉编号为1777的进程(请根据实际情况输入) http://www.cnblogs.c ...