`

简单词法分析器

    博客分类:
  • JAVA
 
阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.IntBuffer;

public class hxx {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) {
		File inFile = null;
		String str = null;
		String checkletter = "";
		String checknumber = "";
		String caltory = "";
		String fengefu = "";
		String s[] = { "main", "int", "char", "if", "while", "break",
				"continue", "do", "return", "for", "printf", "scanf" };
		// String caltory[]={"=","+",">","-","*","/","<",">=","<=","!=","=="};
		// String
		int lengh = 0;
		try {
			inFile = new File("File.txt");
			// RandomAccessFile indata=new RandomAccessFile(inFile,"r");
			BufferedReader inBuffer = new BufferedReader(new FileReader(inFile));
			while ((str = inBuffer.readLine()) != null) {
				lengh = str.length();
				char data[] = new char[lengh];
				data = str.toCharArray();
				for (int i = 0; i < lengh; i++) {
					if (checkletter != "" && isletter(data))
						checkletter += data;
					if (checkletter == "" && isletter(data))
						checkletter += data;
					if (checkletter != "" && isnumber(data))
						checkletter += data;
					if (checkletter == "" && isnumber(data))
						checknumber += data;
					if (checknumber != "" && data == '.')
						checknumber += data;
					if (iscal(data)) {
						if (checkletter != "") {
							int j;
							for (j = 0; j < s.length; j++)
								if (checkletter.equalsIgnoreCase(s[j])) {
									System.err.println("(1,\"" + s + "\")");
									break;
								}
							if (j == s.length)
								System.err.println("(2,\"" + checkletter
										+ "\")");
							checkletter = "";
						}
						if (checknumber != "") {
							System.err.println("(3,\"" + checknumber + "\")");
							checknumber = "";
						}
						caltory += data;
						if (data == 60 || data == 62 || data == 33
								|| data == 61 || data == 43) {
							if (data == 61) {
								caltory += data;
								System.err.println("(4,\"" + caltory + "\")");
								i = i + 1;
							}
							// else if(data==43)
							else if (data == 43) {
								if (data == 43) {
									caltory += data;
									System.err.println("(4,\"" + caltory
											+ "\")");
									i = i + 1;
								} else
									System.err.println("(4,\"" + caltory
											+ "\")");
							} else
								System.err.println("(4,\"" + caltory + "\")");
							// if(data==43)

							// else System.err.println("(4,\""+caltory+"\")");
						} else
							System.err.println("(4,\"" + caltory + "\")");
						caltory = "";
					}
					if (isfengefu(data)) {
						if (checkletter != "") {
							int j;
							for (j = 0; j < s.length; j++)
								if (checkletter.equalsIgnoreCase(s[j])) {
									System.err.println("(1,\"" + checkletter
											+ "\")");
									break;
								}
							if (j == s.length)
								System.err.println("(2,\"" + checkletter
										+ "\")");
							checkletter = "";
						}
						if (checknumber != "") {
							System.err.println("(3,\"" + checknumber + "\")");
							checknumber = "";
						}
						fengefu += data;
						if (data != 32)
							System.err.println("(5,\"" + fengefu + "\")");
						fengefu = "";
					}
				}
				if (checkletter != "") {
					System.err.println("(2,\"" + checkletter + "\")");
					checkletter = "";
				}
				if (checknumber != "") {
					System.err.println("(2,\"" + checkletter + "\")");
					checknumber = "";
				}

			}
			inBuffer.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static boolean isnumber(char c) {
		if (47 < c && c < 58)
			return true;
		else
			return false;
	}

	public static boolean isletter(char c) {
		if (c > 64 && c < 91 || c > 96 && c < 123)
			return true;
		else
			return false;
	}

	public static boolean iscal(char c) {
		if (c == 43 || c == 33 || c == 42 || c == 45 || c == 47 || c == 60
				|| c == 61 || c == 62)
			return true;
		else
			return false;
	}

	public static boolean isfengefu(char c) {
		if (c == 32 || c == 44 || c == 59 || c == 40 || c == 41 || c == 123
				|| c == 125 || c == 38 || c == 34 || c == 38 || c == 91
				|| c == 93 || c == 58)
			return true;
		else
			return false;
	}

}

 

分享到:
评论

相关推荐

    词法分析器_词法分析器_简单的词法分析器_

    压缩包中的“词法分析器”文件可能是实现这个简单词法分析器的源代码。这个源代码可能用C、C++、Java或其他编程语言编写,包含了上述提到的词法分析过程。通过阅读和理解这个源代码,我们可以学习到词法分析器的基本...

    C#简单词法分析器

    本文将详细介绍“C#简单词法分析器”及其在编译原理中的应用,以及如何使用该工具。 词法分析器,也称为扫描器或词法分析程序,是编译器或解释器的前端组件。它的主要任务是将源代码分解为一系列有意义的符号,这些...

    C++简单词法分析器

    在本案例中,我们讨论的是用C++实现的一个简单的词法分析器。 C++是一种静态类型、编译式的通用编程语言,以其灵活性和高效性而被广泛应用。它支持面向对象编程,同时也可以进行过程化编程和泛型编程。C++的标准库...

    简单词法分析器,输出token和简单符号表

    在这个简单的词法分析器中,我们关注的是如何识别并处理源代码中的不同元素,如关键字、标识符、运算符、常量等。 首先,词法分析器的核心任务是分词(tokenization)。在编程语言中,源代码由一系列字符组成,而...

    简单词法分析器 C语言

    综上所述,这是一个基于纯C语言实现的简单词法分析器示例。通过对输入的字符序列进行逐个分析,识别出不同类型的Token,并为关键字和其他词素分配不同的类别编号。这种实现方式虽然简单,但能够有效地展示词法分析的...

    编译原理上机作业-词法分析程序实现(PASCAL简单词法分析器)

    【编译原理上机作业-词法分析程序实现(PASCAL简单词法分析器)】 在编程语言处理领域,编译原理是至关重要的理论基础,它涉及到将高级语言转化为机器可执行代码的过程。词法分析是编译过程的第一步,它的主要任务...

    一个简单的的词法分析器!

    一个简单的词法分析器是编译器或者解释器的第一步,它的主要任务是识别源代码中的关键字、标识符、常量、运算符以及其他特殊符号,并为后续的语法分析阶段提供输入。 在这个“一个简单的词法分析器!”项目中,我们...

    cifafenxi.rar_简单词法分析器

    简单词法分析器,正如“cifafenxi.rar_简单词法分析器”这个标题所暗示的,是用来识别并分解源代码中的基本语法单元——词素的工具。在这个压缩包中,可能包含了实现这样一个词法分析器的源代码、文档或示例数据。 ...

    一个很简单的词法分析器

    词法分析器,也称为扫描器或词法分析程序,是编译器设计中的关键组成部分...通过学习和分析这个简单的词法分析器,我们可以深入理解编程语言的解析过程,这对于未来进行编译器设计或语言解析相关的项目具有极大的价值。

    gaoxing.rar_flexgrocer_java 词法分析器_简单词法分析器_词法分析 java_词法分析器

    本项目"flexgrocer_java 词法分析器"是一个使用Java语言实现的简单词法分析工具,专注于处理Java源代码。下面我们将详细探讨词法分析的概念、它的重要性以及如何用Java实现一个简单的词法分析器。 词法分析,也称为...

    Java--实现简单词法分析器.zip

    在eclipse、Java环境下实现简单词法分析器: 1.输入:待词法分析的txt文档路径 2.输出: ① 单词串:每一个单词串均为一个WordString对象,所有单词串存放在List中(wordString) ② 符号表:存放在List中...

    简单词法分析器c++

    本项目“简单词法分析器c++”正是实现这一功能的一个C++程序。下面我们将深入探讨词法分析的基本概念、C++在编程中的应用以及如何构建一个简单的词法分析器。 词法分析,也称为扫描或词法分析器(lexer或tokenizer...

    c的简单词法分析器,源代码

    词法分析器是编译器设计中的一个重要组成部分,它的主要任务是将源代码文本转换成一系列有意义的符号,称为标记(Token),为后续的语法分析和语义分析提供基础。在C语言中,词法分析器通常需要识别关键字、标识符、...

    简单词法分析器源代码-编译原理

    在这个“简单词法分析器源代码”中,我们可以深入理解编译器的工作流程,并从中学习到如何构建一个简单的词法分析器。 词法分析器通常由以下几部分组成: 1. **输入处理**:词法分析器首先读取源代码文件,通常是...

    C#实现 C语言的简单词法分析器

    本文将深入探讨如何使用C#语言实现一个简单的C语言词法分析器,以此来完成编译原理课的作业。我们将不涉及部分辅助功能的实现,主要关注词法分析的核心逻辑。 词法分析,也称为扫描或Tokenizing,是将源代码分解成...

    简单词法分析器 课本范例实例

    源代码 简单的词法分析器 有助于理解基本原理

    基于Jflex的简单词法分析器.zip

    **基于JFlex的简单词法分析器** 在编程语言领域,词法分析是编译器设计中的关键步骤,它将源代码分解成一系列有意义的符号,即“词法单元”或“记号”。JFlex是一种用于Java的词法分析器生成器,它允许开发者根据...

Global site tag (gtag.js) - Google Analytics