当前位置: 首页 > article >正文

递归下降分析法js版

全部代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title>
</head>
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet" />
<style>*:focus {outline: none;}
</style><body><div class="h-screen bg-gray-100 py-6 flex justify-center items-center w-full"><div class="w-full min-h-min md:w-1/2 md:h-1/2 m-9 relative"><div class="absolute inset-0 bg-gradient-to-r from-green-300 to-blue-300 shadow-lg transform md:-skew-y-6 sm:skew-y-0 sm:-rotate-6 sm:rounded-3xl rounded-md"></div><div class="p-8 relative min-h-min z-10 bg-white rounded-xl"><div class="uppercase text-black text-3xl md:text-base">INPUT expression</div><div class="mt-5"><input type="text" class="px-2 ring-2 py-3 md:py-0 rounded-md w-full md:w-1/2" id="inputExpress" /><input type="button" value="S t a r t" class="uppercase mt-6 md:mt-0 md:ml-3 px-3 md:py-1 py-2 w-full md:w-min rounded-md cursor-pointer bg-blue-400 text-white" id="inputInput" /></div><div class=""><div class="uppercase text-black text-3xl md:text-base mt-6">out result</div><textarea class="resize-none border ring-2 m-2 w-full h-36 rounded-md p-2 box-border" id="textareaInput"></textarea></div></div></div></div>
</body>
<script>let printf = () => {let inputText = document.getElementById('textareaInput')printf= {log: (str) => {inputText.value += str + '\n'},clear: () => {inputText.value = ''inputText.value = ''}}}function getResult(strExpression) {let isValid = true,nowI = 0E()return isValidfunction E() {printf.log('E=>TG')T()G()}function T() {printf.log('T=>FS')F()S()}function G() {printf.log('G=>ε')if (strExpression[nowI] == '+') {nowI++printf.log('G >+TG')T()G()} else if (strExpression[nowI] == '-') {nowI++printf.log('G >-TG')T()G()}}function F() {if (strExpression[nowI] == '(') {nowI++E()if (strExpression[nowI] == ')') {nowI++printf.log('F=>(E)')} else flag = false} else if (strExpression[nowI] == 'i') {printf.log('F=>i')nowI++} else isValid = false}function S() {printf.log('S=>ε')if (strExpression[nowI] == '*') {nowI++F()S()} else if (strExpression[nowI] == '/') {nowI++F()S()}}}window.onload = () => {let inputExpress = document.getElementById('inputExpress'),inputInput = document.getElementById('inputInput')printf()inputInput.onclick = () => {printf.clear()printf.log(getResult(inputExpress.value) ? 'Accepted' : 'error')}}
</script></html>

效果:
在这里插入图片描述

http://www.lryc.cn/news/2419078.html

相关文章:

  • Ubuntu Kylin 20.10 优麒麟操作系统安装与体验
  • 关于MediaPlay使用方法 与基本理解
  • Linux:串口编程详解(转)
  • linux 14.04安装方法,Ubuntu 14.04下安装和配置Terminator
  • 【计算机毕业设计】Django音乐推荐系统-40803,毕设开题选题+程序定制+论文书写+答辩ppt书写-原创(题目+编号)的定制程序
  • C#开源项目
  • 收益率-计算方法介绍
  • 上市公司应计盈余管理(琼斯模型:基本Jones模型和修正Jones模型)
  • 提供真随机数源的网站
  • vue实现动态获取左侧导航宽度,右侧内容动态改变margin值
  • Google网站流量统计工具
  • 利用vps+frp实现访问公司内网windows远程桌面
  • C代码内存检测工具memwatch 使用总结
  • Windows CE的目录组织
  • JDK1.8下载、安装及环境变量配置
  • 数据库开发019 DataReader对象
  • 数字图像处理(冈萨雷斯 第三版)
  • 数据通信与计算机网络
  • GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]
  • 虚拟机的几种网络连接方式
  • e1000网络驱动分析
  • Bugku杂项题目解析
  • Win7桌面显示计算机(我的电脑)图标
  • 操作系统0x08-内存管理概念
  • 农夫安全-安全网站导航 farmsec
  • 全球免费公共DNS服务器IP地址大全(包含IPv6)
  • 通过基因组选择预测杂交水稻的表现(数据挖掘)
  • Linux操作系统之文件系统详解
  • 完全从零Java自学系列【入门篇】(第一课:环境搭建工具安装与初入编程【初识工程JAVA文件语法变量判断循环】)
  • jpa 托管_JPA EntityManager详解(一)