一、实验目的
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析。
二、词法分析器的功能
完成对源程序字符串的词法分析,输出形式是源程序的五类单词符号的二元式代码,并保存在文件中。
三、设计内容
选择以下三个任务之一,编写其词法分析程序。
1、初级任务
已知某语言标识符由小写字母、数字和下划线3中符号组成,起始字符为字母,结束符为字母或数字,且下划线字符两两不相连,对该标识符集,试写出描述它的正规式及DFA,编写识别它的程序。
分析需要实现的功能:
- 1、开头只能为字母;2、字符串只能出现字母数字下划线;3、结尾只能是字母或数字;4、不能连续出现两个‘_’。
- 这个初级任务还是比较简单的,我的思路是把输入的字符串存入数组,用
for
循环遍历,ASCII码进行判断这些条件,如果符合就返回true
输出语句,不符合返回false
。
import java.util.Scanner;
// _的ASCII码:95
public class shiyan1_1 {
private static int flag = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = sc.next();
char[] chars = s.toCharArray();
shiyan1_1.judge(s);
if (shiyan1_1.judge(s) && chars[s.length()-1]!='_')
System.out.println("输入正确: "+s);
else
System.out.println("不合法的字符串!");
}
public static boolean judge(String s) {
char[] chars = s.toCharArray();
int flag = 0;
int numSum = 0;
if (chars[0] >= 65 && chars[0] <= 90 || chars[0] >= 97 && chars[0] <= 122) //大小写字母
for (int i = 0; i < chars.length; i++) {
if(chars[i]>=65 && chars[i]<=90 || chars[i]>=97 && chars[i]<=122 || chars[i]==95 || chars[i]>=48 && chars[i]<=57){
numSum+=1;
if(chars[i]=='_'){
flag+=1;
if (flag == 2)
break;
}else flag=0;
}
}
if (numSum == chars.length && flag < 2) {
return true;
}
return false;
}
}