编译原理词法分析器

来源:互联网 发布:c语言 丹尼斯里奇 编辑:程序博客网 时间:2024/04/30 11:35

编写一个词法分析器,它针对输入文件,实现以下功能:

     1)每遇到你的学号,就输出你的名字,对于其他的串原样输出。

     2)统计输入文件中字母的数目。

例如:(以肖永跃的上机题为例):

输入文件如下所示:

200213001 hello world

wo ai tian an men

hello world i love

200213001

 

输出应该如下所示:

肖永钦 hello world

wo ai tian an men

hello world i love

肖永钦

# of chars = 66

 

java代码解决:

package Bianyiyuanli.ThirdWeek;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class WordAlaylist {private static Map<String, String> student;private static int count = 0;private static int flag = 0;private static String temp;static {student = new HashMap<String, String>();student.put("20137760229", "总理");student.put("20137760999", "习近平");student.put("20161224", "马克思原理");}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String str = sc.nextLine() + " ";for (int i = 0; i < str.length(); i++) {flag = i;// 记录是数字的0-9的位置if (str.charAt(i) <= 57 && str.charAt(i) >= 48) { while(str.charAt(i) <= 57 && str.charAt(i) >= 48) i++;//i++;temp = str.substring(flag, i);// 截取数字部分String s = student.get(temp);//从Map集合获取相对应的值,即学号--->姓名if (s == null) {System.out.println("该" + temp + "学号不存在");} else {// 获取学号对应的姓名System.out.print(student.get(temp)  );}System.out.print(str.charAt(i));}else if((str.charAt(i) >='A' &&str.charAt(i)<='Z')  ||  (str.charAt(i)>='a' && str.charAt(i) <= 'z')){count++;System.out.print(str.charAt(i));}else{System.out.print(str.charAt(i));}}System.out.println();System.out.println("单词的个数"+count);}}}


0 0
原创粉丝点击