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++的标准库...
在这个简单的词法分析器中,我们关注的是如何识别并处理源代码中的不同元素,如关键字、标识符、运算符、常量等。 首先,词法分析器的核心任务是分词(tokenization)。在编程语言中,源代码由一系列字符组成,而...
综上所述,这是一个基于纯C语言实现的简单词法分析器示例。通过对输入的字符序列进行逐个分析,识别出不同类型的Token,并为关键字和其他词素分配不同的类别编号。这种实现方式虽然简单,但能够有效地展示词法分析的...
【编译原理上机作业-词法分析程序实现(PASCAL简单词法分析器)】 在编程语言处理领域,编译原理是至关重要的理论基础,它涉及到将高级语言转化为机器可执行代码的过程。词法分析是编译过程的第一步,它的主要任务...
一个简单的词法分析器是编译器或者解释器的第一步,它的主要任务是识别源代码中的关键字、标识符、常量、运算符以及其他特殊符号,并为后续的语法分析阶段提供输入。 在这个“一个简单的词法分析器!”项目中,我们...
简单词法分析器,正如“cifafenxi.rar_简单词法分析器”这个标题所暗示的,是用来识别并分解源代码中的基本语法单元——词素的工具。在这个压缩包中,可能包含了实现这样一个词法分析器的源代码、文档或示例数据。 ...
词法分析器,也称为扫描器或词法分析程序,是编译器设计中的关键组成部分...通过学习和分析这个简单的词法分析器,我们可以深入理解编程语言的解析过程,这对于未来进行编译器设计或语言解析相关的项目具有极大的价值。
本项目"flexgrocer_java 词法分析器"是一个使用Java语言实现的简单词法分析工具,专注于处理Java源代码。下面我们将详细探讨词法分析的概念、它的重要性以及如何用Java实现一个简单的词法分析器。 词法分析,也称为...
在eclipse、Java环境下实现简单词法分析器: 1.输入:待词法分析的txt文档路径 2.输出: ① 单词串:每一个单词串均为一个WordString对象,所有单词串存放在List中(wordString) ② 符号表:存放在List中...
本项目“简单词法分析器c++”正是实现这一功能的一个C++程序。下面我们将深入探讨词法分析的基本概念、C++在编程中的应用以及如何构建一个简单的词法分析器。 词法分析,也称为扫描或词法分析器(lexer或tokenizer...
词法分析器是编译器设计中的一个重要组成部分,它的主要任务是将源代码文本转换成一系列有意义的符号,称为标记(Token),为后续的语法分析和语义分析提供基础。在C语言中,词法分析器通常需要识别关键字、标识符、...
在这个“简单词法分析器源代码”中,我们可以深入理解编译器的工作流程,并从中学习到如何构建一个简单的词法分析器。 词法分析器通常由以下几部分组成: 1. **输入处理**:词法分析器首先读取源代码文件,通常是...
本文将深入探讨如何使用C#语言实现一个简单的C语言词法分析器,以此来完成编译原理课的作业。我们将不涉及部分辅助功能的实现,主要关注词法分析的核心逻辑。 词法分析,也称为扫描或Tokenizing,是将源代码分解成...
源代码 简单的词法分析器 有助于理解基本原理
**基于JFlex的简单词法分析器** 在编程语言领域,词法分析是编译器设计中的关键步骤,它将源代码分解成一系列有意义的符号,即“词法单元”或“记号”。JFlex是一种用于Java的词法分析器生成器,它允许开发者根据...