实验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小时内删除。