编译原理 #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实现)的更多相关文章
- 作业十一——LL(1)文法的判断,递归下降分析程序
作业十一——LL(1)文法的判断,递归下降分析程序 判断是否为LL(1)文法 选取有多个产生式的求select,只有一条产生式的无需求select 同一个非终结符之间求交集,全部判断为空后则为LL(1 ...
- 编译原理之LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- 编译原理:LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- 十一次作业——LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da | ε (3)B -> cC (4)C -> aADC | ε (5)D -> b | ε 验证文法 G ...
- 第十一次作业 LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- 第十一次 LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- 【编译原理】TEST递归下降演示
MyUtil.java package Util; import Value_Final.RRule; public class MyUtil { /** * 判断字符串是否是关键字 * @param ...
- 编译原理实验之SLR1文法分析
---内容开始--- 这是一份编译原理实验报告,分析表是手动造的,可以作为借鉴. 基于 SLR(1) 分析法的语法制导翻译及中间代码生成程序设计原理与实现1 .理论传授语法制导的基本概念,目标代码结 ...
随机推荐
- 阿里云 windows 2008 使用Thinkphp5 captcha验证码不显示问题
第一次使用Thinkphp5在阿里云上面运行,后台验证码竟然显示不出来!有种要吐血的感觉...找了半天,终于找到类似解决办法 thinkphp,onethink和thinkox中验证码不显示的解决方法 ...
- Java中如何使用非强制类型转换把字符串转换成int类型
①强制类型转换代码如下: String string = "123456"; int a,b = 0; @Test public void String2Int1() { //方法 ...
- 20165311《网络对抗技术》Exp1 PC平台逆向破解
实验要求: 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 掌握反汇编与十六进制编程器 能正确修改机器指令改变程序执行流程 能正确构造payload进行bof攻击 实验内容: 手工修 ...
- vue中路由懒加载实现amd加载文件
一般我们配置路由的时候是import引入: import log from '@/components/login': { path: '/login', component: log , hidde ...
- 5. Scala函数式编程的基础
5.1 函数式编程内容及介绍顺序说明 5.1.1 函数式编程内容 -函数式编程基础 函数定义/声明 函数运行机制 递归(难点,[最短路径,邮差问题,迷宫问题,回溯]) 过程 惰性函数和异常 -函数式编 ...
- WEB日期控件
http://www.cnblogs.com/jiangbei/p/7270788.html 日期控件——my97 <div class="form-group"> ...
- ajax 未加载出数据时,显示loding,数据显示后,隐藏loading
$("#CreateReport").click(function () { // RptID,Template,TemplateType,FileName var RptID = ...
- 常用sql 集合记录整理
select 'truncate table ' + Name + ';' from sysobjects where xtype='U' order by name asc; -- 查询出指定库的 ...
- 如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?
---SQL Server查询正在执行的SQL语句及执行计划 select ds.session_id,dr.start_time,db_name(dr.database_id),dr.blockin ...
- Asp.net Web Api开发(第四篇)Help Page配置和扩展
https://blog.csdn.net/sqqyq/article/details/52708613