可以自己做网站卖东西梧州论坛手机红豆网

news/2025/10/6 13:32:57/文章来源:
可以自己做网站卖东西,梧州论坛手机红豆网,网站seo外链,潍坊网站外包实现一个一遍扫描的编译前端#xff0c;将简化高级语言的部分语法成分#xff08;含赋值语句、分支语句、循环语句等#xff09;翻译成四元式#xff08;或三地址代码#xff09;#xff0c;还要求有合理的语法出错报错和错误恢复功能。 测试样例 beginwhile ab do…实现一个一遍扫描的编译前端将简化高级语言的部分语法成分含赋值语句、分支语句、循环语句等翻译成四元式或三地址代码还要求有合理的语法出错报错和错误恢复功能。 测试样例 beginwhile ab doif c5beginwhile xybeginz:x1;enda:2; b:4;c:c-1;area:3.14*a*a;s:2*3.1416*r*(hr);end endend #测试结果 词法分析程序 从文件中读取程序 (1, begin) (4, while) (10, a) (20, ) (10, b) (5, do) (2, if) (10, c) (20, ) (11, 5) (1, begin) (4, while) (10, x) (23, ) (10, y) (1, begin) (10, z) (18, :) (10, x) (13, ) (11, 1) (26, ; ) (6, end) (10, a) (18, :) (11, 2) (26, ; ) (10, b) (18, :) (11, 4) (26, ; ) (10, c) (18, :) (10, c) (14, -) (11, 1) (26, ; ) (10, area) (18, :) (11, 3.14) (15, *) (10, a) (15, *) (10, a) (26, ; ) (10, s) (18, :) (11, 2) (15, *) (11, 3.1416) (15, *) (10, r) (15, *) (27, () (10, h) (13, ) (10, r) (28, )) (26, ; ) (6, end) (6, end) (6, end) (0, #) 词法分析完成 语法分析中…,请稍候 error!--------缺少开头符号begin程序第4行出现语法错误 error!--------不是符号then程序第5行出现语法错误 error!--------不是符号do程序第7行出现语法错误 词法分析完成 语法分析完成共检查出3个语法错误 中间代码生成结果 0:if a b goto 2 1:goto 22 2:if c 5 goto 4 3:goto 21 4:if x y goto 6 5:goto 9 6:t1 x 1 7:z t1 8:goto 4 9:a 2 10:b 4 11:t2 c - 1 12:c t2 13:t3 3.14 * a 14:t4 t3 * a 15:area t4 16:t5 2 * 3.1416 17:t6 t5 * r 18:t7 h r 19:t8 t6 * t7 20:s t8 21:goto 0 语义分析 public class Element {String times;String data1;String op;String data2;String type;public void setInteger(Integer integer) {this.integer integer;}Integer integer;Element(String times,String data1,String op,String data2) {//this.times times;this.data1 data1;this.op op;this.data2 data2;}Element(String times,String data1,String op,String data2,Integer integer) {//if gotothis.times times;this.data1 data1;this.op op;this.data2 data2;this.integerinteger;}Element(Integer integer) {//if gotothis.integerinteger;}Element() {//if goto} }public class SemanticAnalysis {static int j0,t1;static ListElement elements new ArrayListElement();static void memset(String times,String data1,String op,String data2) {Element e new Element(times,data1,op,data2);elements.add(e);}public static String expression() { // 表达式String times,data1,op,data2;data1 term();while(analyzer.llist.get(j).equals() || analyzer.llist.get(j).equals(-)) {// 当前单词为、if(analyzer.llist.get(j).equals()) // op ;else // -op -;j;data2 term();times t (t);memset(times,data1,op,data2);data1 times;}return data1;}private static String term() { // 项String times,data1,op,data2;data1 factor();while(analyzer.llist.get(j).equals(*) || analyzer.llist.get(j).equals(/) ) { // 当前单词为*、/if(analyzer.llist.get(j).equals(*)) // *op *;else // /op /;j;data2 factor();times t (t);memset(times,data1,op,data2);data1 times;}return data1;}private static String factor() { // 因子String data ;if(analyzer.map2.get(analyzer.llist.get(j)) 10) { // IDdata analyzer.llist.get(j);j;} else if(analyzer.map2.get(analyzer.llist.get(j)) 11) { // NUMdata analyzer.llist.get(j);j;}else if(analyzer.llist.get(j).equals(()) { // 左括号j;data expression();if(analyzer.llist.get(j).equals()))j;} else {System.out.println(Error,表达式错误);}return data;}} 语法分析 public class GrammarAnalysis {static char[] s new char[100];static int sing;static int i; //用来记录数组s中的下标static int error 0;static void P() {if (Objects.equals(analyzer.llist.get(i), begin)) {i;int cur analyzer.map.get(i);S(); //处理if (Objects.equals(analyzer.llist.get(i), end)) {i;} else {System.out.println(error!--------不是结尾符号end 程序第 analyzer.map.get(i) 行出现语法错误);error;i;}} else {System.out.println(error!--------缺少开头符号begin 程序第 analyzer.map.get(i) 行出现语法错误);error;S(); //处理if (Objects.equals(analyzer.llist.get(i), end)) {i;} else {System.out.println(error!--------不是结尾符号end 程序第 analyzer.map.get(i) 行出现语法错误);error;i;}}}static void B() {i;D();int cur SemanticAnalysis.elements.size();SemanticAnalysis.elements.add(new Element());//thenif (!analyzer.llist.get(i).equals(then)) {System.out.println(error!--------不是符号then 程序第 analyzer.map.get(i) 行出现语法错误);error;} elsei;P();SemanticAnalysis.elements.get(cur).setInteger(SemanticAnalysis.elements.size());//elsei--;}static void C() {i;D();int cur SemanticAnalysis.elements.size();SemanticAnalysis.elements.add(new Element());//doif (!analyzer.llist.get(i).equals(do)) {System.out.println(error!--------不是符号do 程序第 analyzer.map.get(i) 行出现语法错误);error;} elsei;P();SemanticAnalysis.elements.add(new Element(cur - 1));SemanticAnalysis.elements.get(cur).setInteger(SemanticAnalysis.elements.size());i--;}static void D() {String data1, data2, op;SemanticAnalysis.j i;;data1 SemanticAnalysis.expression();//表达式E();op analyzer.llist.get(i);//|....i;SemanticAnalysis.j i;data2 SemanticAnalysis.expression();//表达式SemanticAnalysis.elements.add(new Element(if, data1, op, data2, SemanticAnalysis.elements.size() 2));E();}static void S() {if (analyzer.map2.get(analyzer.llist.get(i)) 10)A();else if (analyzer.llist.get(i).equals(while))C();else if (analyzer.llist.get(i).equals(if)) {B();}i;S1();// if(s[i]!e) {// } /* if(Objects.equals(analyzer.llist.get(i), ;)) {}else {System.out.println(error!-----------缺少结尾符号;程序第analyzer.map.get(i)行出现语法错误);error;i;S1();}*/}static void S1() {if (i analyzer.llist.size() !Objects.equals(analyzer.llist.get(i), end)) {// i;S();}}static void A() {if (i 1 analyzer.llist.size() Objects.equals(analyzer.llist.get(i 1), :)) {String times analyzer.llist.get(i), data1;SemanticAnalysis.j i;SemanticAnalysis.j 2;data1 SemanticAnalysis.expression();//表达式SemanticAnalysis.memset(times, data1, , );i;i;E();if (Objects.equals(analyzer.llist.get(i), )) || Objects.equals(analyzer.llist.get(i), ;)) {if (Objects.equals(analyzer.llist.get(i), ))) {i;}} else {System.out.println(error!--------不是结尾符号或者 程序第 analyzer.map.get(i) analyzer.llist.get(i) 行出现语法错误);error;i;}} else {System.out.println(error!---------不是赋值语句 程序第 analyzer.map.get(i) 行出现语法错误);error;i;i;E();if (Objects.equals(analyzer.llist.get(i), )) || Objects.equals(analyzer.llist.get(i), ;)) {if (Objects.equals(analyzer.llist.get(i), ))) {i;}} else {System.out.println(error!--------不是结尾符号或者 程序第 analyzer.map.get(i) 行出现语法错误);error;i;}}}static void E() {T();/* if(Objects.equals(analyzer.llist.get(i), ) || Objects.equals(analyzer.llist.get(i), -) || Objects.equals(analyzer.llist.get(i), ;) || Objects.equals(analyzer.llist.get(i), ))) {*/E1();/* }else {System.out.println(error!-----------不是结尾符号或者-或者或者程序第analyzer.map.get(i)行出现语法错误); error;E1();}*/}static void T() {F();if (Objects.equals(analyzer.llist.get(i), ) || Objects.equals(analyzer.llist.get(i), -) || Objects.equals(analyzer.llist.get(i), ;) || Objects.equals(analyzer.llist.get(i), )) || Objects.equals(analyzer.llist.get(i), *) || Objects.equals(analyzer.llist.get(i), /)) {T1();}}static void F() {if (Objects.equals(analyzer.llist.get(i), ()) {i;E();} else {i;}}static void T1() {if (Objects.equals(analyzer.llist.get(i), *)) {i;F();T1();} else if (Objects.equals(analyzer.llist.get(i), /)) {i;F();T1();}}static void E1() {if (Objects.equals(analyzer.llist.get(i), )) {i;T();E1();} else if (Objects.equals(analyzer.llist.get(i), -)) {i;T();E1();}}public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println(词法分析程序);System.out.println(从文件中读取程序);System.out.println();analyzer.initToken();analyzer.ReadFile1();System.out.println(语法分析中....,请稍候);i 0;sing 0;if (Objects.equals(analyzer.llist.get(0), #)) System.exit(-1);P();if (Objects.equals(analyzer.llist.get(i), #)) {} else {System.out.println(error!-------不是结尾符号# analyzer.llist.get(i) i);error;}System.out.println(词法分析完成);System.out.println(语法分析完成共检查出 error 个语法错误);System.out.println(\n中间代码生成结果);for (int i 0; i SemanticAnalysis.elements.size(); i) {Element e SemanticAnalysis.elements.get(i);if (e.times null)System.out.println(i : goto e.integer);else if (e.times.equals(if))System.out.println(i : e.times e.data1 e.op e.data2 goto e.integer);elseSystem.out.println(i : e.times e.data1 e.op e.data2);}}} 词法分析 public class analyzer {public static ListString llistnew ArrayList();static MapInteger,Integer mapnew HashMap();static MapString,Integer map2new HashMap();final static String ID \\p{Alpha}(\\p{Alpha}|\\d)*;static int countLine1;/** 整形常数 NUM 正则表达式*/final static String NUM \\d\\d*;final static String regex ^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0|0)$;/** token 词法单元* 词符号 种别码 *//** 关键字 token*/static MapString, Integer TOKEN_KEYWORDS;/** 运算符/界符 token */static MapString, Integer TOKEN_OPERATOR_BOUNDARY;/** 其他单词 token*/static MapString, Integer TOKEN_ID_SUM;/** 文件根目录*/static final String ROOT_DIRECTORY program.txt;/*** 初始化 token 单元*/public static void initToken(){//种别码创建TOKEN_KEYWORDS new HashMapString, Integer(){//关键字{put(begin, 1);put(if, 2);put(then, 3);put(while, 4);put(do, 5);put(end, 6);}};TOKEN_OPERATOR_BOUNDARY new HashMapString, Integer(){//运算符和界符{put(, 13);put(-, 14);put(*, 15);put(/, 16);put(:, 17);put(:, 18);put(, 20);put(, 21);put(, 22);put(, 23);put(, 24);put(, 25);put(;, 26);put((, 27);put(), 28);put(#, 0);}};TOKEN_ID_SUM new HashMapString, Integer(){//标识符和整型常数{put(ID, 10);put(NUM, 11);}};}/*** 读 源程序 文件*/public static void ReadFile1() {FileInputStream fis null;InputStreamReader isr null;BufferedReader br null;try {fis new FileInputStream(ROOT_DIRECTORY);isr new InputStreamReader(fis, UTF-8); // 转化类br new BufferedReader(isr); // 装饰类String line;/** 记录 程序 行数 */while ((line br.readLine()) ! null) { // 每次读取一行分析一行boolean answer lexicalAnalysis(line);if(answer false){System.out.printf(ERROR 编译错误 第 %d 行出现 词法错误 \n, countLine);break;}countLine;}System.out.printf(词法分析完成\n);} catch (Exception ex) {ex.printStackTrace();} finally {try {br.close(); // 关闭最后一个类会将所有的底层流都关闭} catch (Exception ex) {ex.printStackTrace();}}}/** 判断key是否是其他单词*/private static boolean isIDOrSUM(String key){if (key.matches(ID) ) {llist.add(key);map.put(llist.size()-1,countLine);map2.put(key,TOKEN_ID_SUM.get(ID));System.out.printf((%d, %s)\n, TOKEN_ID_SUM.get(ID), key);}else if (key.matches(NUM)||key.matches(regex)) {llist.add(key);map.put(llist.size()-1,countLine);map2.put(key,TOKEN_ID_SUM.get(NUM));System.out.printf((%d, %s)\n, TOKEN_ID_SUM.get(NUM), key);}else {return false;}return true;}/*** 进行 词法分析* param word 要分析的字符串* return 结果*/public static boolean lexicalAnalysis(String word){word word.trim(); // 去首尾空格String[] strings word.split(\\p{Space}); // 分割字符串保证处理的字符串没有空格for (String string : strings) {/** 3种情况* 1. 关键字 end 关键字的后面一定是空格 * 2. 运算符/ 分界符 continue* 3. 其他单词 continue*/String key ;for (int i 0; i string.length(); i){String indexChar String.valueOf(string.charAt(i)) ;if(i1string.length()){if((indexCharstring.charAt(i1)).equals(//))return true;}/** 是 运算符 或者 关键字*/if (TOKEN_OPERATOR_BOUNDARY.containsKey(indexChar) ||TOKEN_KEYWORDS.containsKey(string.substring(i, string.length()))){if (key.length() 0) {if (isIDOrSUM(key) false) {/** 词法错误 */return false;}key ;}if(TOKEN_OPERATOR_BOUNDARY.containsKey(indexChar)) {/** 1. 是 运算符/分界符 */key indexChar;if(i 1 string.length() TOKEN_OPERATOR_BOUNDARY.containsKey(indexChar string.charAt(i1))){ // 运算分界符key string.charAt(i);}llist.add(key);map.put(llist.size()-1,countLine);map2.put(key,TOKEN_OPERATOR_BOUNDARY.get(key));System.out.printf((%d, %s)\n,TOKEN_OPERATOR_BOUNDARY.get(key),key);key ;}else if(TOKEN_KEYWORDS.containsKey(key string.substring(i, string.length()))) {/** 2. 是关键字*/llist.add(key);map.put(llist.size()-1,countLine);map2.put(key,TOKEN_KEYWORDS.get(key));System.out.printf((%d, %s)\n,TOKEN_KEYWORDS.get(key),key);key ;break;}}else {/** 是其他单词*/key indexChar;/** 其他单词后面是 1. 换行2. 运算符/界符 3. 其他单词*/if(i1 string.length()){if (isIDOrSUM(key) false) {/** 词法错误 */return false;}}}}}return true;}public analyzer() {}public static void main(String[] args) {initToken();System.out.println(词法分析程序);System.out.println(从文件中读取程序);System.out.println();ReadFile1(); for(String s:llist) System.out.println(s);System.out.println();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

温州建网站公司哪家好wordpress 做的网站

IP协议处于OSI参考模型的第三层——网络层,网络层的主要作用是实现终端节点间的通信。IP协议是网络层的一个重要协议,网络层中还有ARP(获取MAC地址)和ICMP协议(数据发送异常通知) 数据链路层的作用在于实现同一种数据链路下的包传递,而网络层…

Linux 中 m、mm、mmm 函数和 make 的区别 - 详解

Linux 中 m、mm、mmm 函数和 make 的区别 - 详解2025-10-06 13:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

做cad室内平面图的家具素材网站重庆怎么推广企业网站

C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。 对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。 带参宏定义的一般形式为&#xff1a…

详细介绍:学习STC51单片机27(芯片为STC89C52RCRC)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[KaibaMath1001] 关于∀ε0,|a-b|ε = a=b的证明

[KaibaMath1001] 关于∀ε>0,|a-b|<ε => a=b的证明摘要:如能理解|a - b| < ε => a = b,则就可以轻松理解数列极限或函数极限的定义。 # 1 关于∀ε>0,|a - b| < ε => a = b的证明 # …

基于Web的分布式图集管理系统架构设计与实践 - 教程

基于Web的分布式图集管理系统架构设计与实践 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

做逆战网站的名字建网站学什么专业

URLEncoder到底是干什么用的&#xff1f;&#xff1f; 都说是对form表单里的请求编码解码用的&#xff0c;但是为什么在写中文文件下载的时候也用到了。 就是说国际通用的编码对中文支持不好&#xff0c;所以需要对着玩意进行转换。 因为中文读取的时候你不给一个编码&#xff…

完整教程:Deepseek/cherry studio中的Latex公式复制到word中

完整教程:Deepseek/cherry studio中的Latex公式复制到word中pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

网站ftp国内大型软件外包公司

文章目录 [toc]配置无线网和分区修改时区安装内核和驱动自动生成 fstab 文件配置 pacman切换到安装好的系统设置时区配置 pacman 国内源安装 gui安装 GRUB 引导建立引导 增加内核模块配置开机自启修改 root 用户密码创建普通用户配置 sudo 重启进入新系统配置 wlan 自动连接 wi…

TCP小结 - 指南

TCP小结 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Couri…

泰安营销型网站建设公司公司网络营销策略

税收问题&#xff0c;怎么把一个数按照部分进行计算呢&#xff1f;比如一个数大于10000&#xff0c;然后超过10000的部分按照5%计算&#xff0c;10000-5000的区间按照3%计算 在C中&#xff0c;你可以使用条件语句&#xff08;if-else语句&#xff09;来根据不同的条件计算税收…

亦庄网站建设wordpress单用户案例

无锁队列的基本介绍 一个关于无锁队列的多线程读写代码示例。在这里&#xff0c;我提供一个简单的示例来说明这个问题。 在使用无锁队列时&#xff0c;需要注意以下几点&#xff1a; 使用原子操作来实现对队列的读写操作&#xff0c;以避免多线程同时访问同一数据导致的竞争条…

石家庄网站建设公司黄页做网站建设 个体经营 小微企业

目录 一、为什么需要低代码平台 二、低代码平台的搭建能力 三、低代码其他能力 四、写在最后 随着互联网和信息技术的快速发展&#xff0c;各行各业都在积极拥抱数字化转型。在这个过程中&#xff0c;软件开发成为企业实现数字化转型的关键环节。然而&#xff0c;传统的软件开发…

国庆 Day2 强基物理

转动惯量又来了。相对论入门。前言:和暑假讲的有重合,上午主要是刚体转动力学、转动惯量、积分求解。那么就结合暑假的部分一起整理了。晚上等老师发了笔记再来更新。 讲了几乎一上午的积分。就当做是复习暑假自学的…

ZR 2025 十一集训 Day 6

100 + 100 + 10 + 0 = 210, Rank 5/22.良心模拟赛,吊打 MX。25十一集训day1 链接:link 题解:题目内 时间:4.5h (2025.10.06 08:30~13:00) 题目数:4 难度:A B C D\(\color{#F39C11} 橙\) \(\color{#3498DB} 蓝\)*…

AirSim 安装过程记录 - zzh

AirSim 安装简略教程与注意事项 Part 1: 安装摘要 本文旨在记录本人安装AirSim的过程,以便于后续在其他设备上的迁移安装 参考网站:微软官方下载指导:https://microsoft.github.io/AirSim/powershell 下载指导:htt…

LARAVEL安装报错:Illuminate\Database\QueryException could not find driver (Connection: sqlite, SQL:

安装LARAVEL12.32.5时,执行 composer global require laravel/installer cd example-appphp artisan serve后访问http://localhost:8000/ 时报错:Illuminate\Database\QueryException could not find driver (Conne…

unix/linux source 命令,其发展历程详细时间线、由来、历史背景 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于AXI模块的视频流传输(硬件连接篇)

初来乍到,先自我介绍,我是一所双非学校集成电路专业的学生,目标是成为一个合格的FPGA,数字ic设计,验证工程师,目前大三,此篇章仅以记录我打FPGA创新创业大赛过程的一些学习经验,是基于zynq7020开发板的开发项目…