实验2. 正规式的定义与应用
一、 实验目的
1. 熟悉正规式的构造方法;
2. 熟悉从字符串中识别特定字符串的方法;
3. 复习对文件的操作。
二、 实验内容和要求
已知一段C语言程序:
要求:
1. 上面C程序内容用文件保存;
2. 请构造出识别上面C程序中的关键字main、int和return的正规式;
3. 为每个正规式编写一段代码作为子程序;
4. 遍写一个主程序调用这些子程序完成对关键字字符串main、int和return的识别;
5. 指出各关键字首字符所处的行号和列号,并给出它们出现时是第几次出现。该结果输出到屏幕,并保存到文件中,格式如下:
main: 2, 1
三、 实验原理(包括实验算法、软件结构框图和流程框图)
四、 源程序(另交盘)
package byyl;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class StringPosition{
private int row;
private int column;
private String s;
private int count;//出现次数
public StringPosition(int row,int column,String s) {
// TODO Auto-generated constructor stub
w = row;
lumn = column;
this.s = s;
count = 1;generated
}
public int getRow() {
return row;
}
public void setRow(int row) {
w = row;
}
public int getColumn() {
return column;
}
public void setColumn(int column) {
lumn = column;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public int getCount() {
return count;
}
//设置出现次数
public void setCount(int count){
unt = count;
}
//显示信息
public void showInfor(){
String content = "关键词:"+s+"\n行:"+row+" 列:"+column+" 次数:"+count;
System.out.println(content);
byyllsy.printStringInfor(content);
}
}
public class byyllsy {
public static String getContent(){
String str = null;
try {
FileReader fr = new FileReader("");
char[] data = new char[1024];
int len = 0;
try {
while ((ad(data, 0,data.length))>0) {
str = new String(data,0,len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件读写错误");
}
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
//分析文件并存储子串
public static List<StringPosition> analysieString(String fileName){
List<StringPosition> strList = new ArrayList<StringPosition>();
int row=1,column=0;
char [] chararray = new char[1024];
chararray[0]='$';//判断是否有值
int count = 0 ;
try {
FileReader fr = new FileReader(fileName);
int temp=-1;
int i = 0;
while (true) {
temp = fr.read();
char c = (char) temp;
//碰到回车,行数加1,列数变0
column++;
if (c=='\n') {
row++;
column=0;
}
if (!isSpace(c)&&temp!=-1) {
chararray[i]=c;
i++;
}
//判断是否为注释
else if(c=='/'){
temp = fr.read();
c = (char) temp;
if (c=='*') {
while (true) {
temp = fr.read();
c = (char) temp;
if (c=='*') {
if (c=='/') {
break;
}
else if (temp==-1) {
break;
}
}
}
}
}
else if((isSpace(c)&&chararray[0]!='$')){
String s = new String(chararray,0,i);
strList.add(new StringPosition(row, column-i, s));
chararray[0]='$';
i=0;
}
else if ((temp==-1&&chararray[0]!='$')) {
String s = new String(chararray,0,i);
strList.add(new StringPosition(row, column-i, s));
break;
}
else if((temp==-1&&chararray[0]=='$')) {
break;
}
}
fr.close();//关闭流,释放资源
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strList;
}
//判断是否为空格,换行或tab键
public static boolean isSpace(char c){
if (c==' '||c=='('||c==9|c=='\n') {
return true;
}
else
return false;
}
//通过字符串查出对应位置
public static List<StringPosition> selectByString(String name,List<StringPosition> strlist){
ArrayList<StringPosition> subsp = new ArrayList<StringPosition>();
int count = 1;//记录次数
for (StringPosition stringPosition : strlist) {
S().equals(name)){
subsp.add(stringPosition);
stringPosition.setCount(count);
count++;
}
}
return subsp;
}
//写入文件保存
public static void printStringInfor(String content){
FileWriter fw = null;
try {
fw = new FileWriter("", true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fw.append(content+"\n");
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关键字的显示
public static void showKey(String key){
List<StringPosition> strlist = analysieString("");
List<StringPosition> sublist = selectByString(key, strlist);
for (StringPosition stringPosition : sublist) {
stringPosition.showInfor();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论