词法分析学习-手工构词

这个是看MOOC学编译原理的一个作业。

识别标识符和关键字,核心在于转移图,dfa的构造

package bingone;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 * 手工构造词法分析器,标注的关键字有if for 。
 * @author bingone
 *
 */
enum Token{
    FOR("for"),
    IF("if");
    String name;
    private Token(String name){
        this.name = name;
    }
}
public class ManualToken {
    /**
     * 对应转移图有 空 0, i 1, if 2,f 3,fo 4, for,5, 其他 6
     * @param row
     * @param str
     */
    private static void solve(int row,String str){
        int cnt = 0;
        int tag = 0;
        str = new String(str+" ");
        char [] token = new char[100];
        for(int i = 0;i<str.length();i++){
            char ch = str.charAt(i);
            if(ch ==‘ ‘){
                if(tag != 0){
                    if(tag==6){
                        System.out.print( "ID("+new String(token, 0, cnt) +")");
                    }else if(tag==2){
                        System.out.print(Token.IF);
                    }else if(tag==5){
                        System.out.print(Token.FOR);
                    }
                    System.out.println( "("+row+","+ (i-cnt+1) + ")" );
                }
                cnt = 0;
                tag = 0;
                continue;
            }
            token[cnt++] = ch;
            if(tag == 0){
                switch(ch){
                    case ‘i‘:tag = 1;break;
                    case ‘f‘:tag = 3;break;
                    default: tag = 6;break;
                }
            }else if(tag == 1){
                if(ch==‘f‘) tag = 2;
                else tag = 6;
            }else if(tag ==2) tag = 6;
             else if(tag==3){
                if(ch==‘o‘) tag = 4;
                else tag = 6;
            }else if(tag==4){
                if(ch==‘r‘) tag = 5;
                else tag = 6;
            }
        }
    }
    public static void main(String[] args) throws Exception {
//      System.out.println(System.getProperty("user.dir"));
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("./src/bingone/in.txt"))) ;
        String aline = null;
        int row = 1;
        while((aline = br.readLine()) != null){
            solve(row++,aline);
        }
    }
}
时间: 2024-09-29 23:48:53

词法分析学习-手工构词的相关文章

No.49 Anagrams[易位构词]

No.49 Anagrams Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. Tags: Hash Table String 难点: 1.没有读清题意,对易位构词的理解不到位 2.题意不明了.输入为一系列字符串,别与回文记混淆了 3.第一次见到,不是很了解,完全没思路 具体分析: 易位构词:两个单词所包含的字符和数量

词法分析学习

任务: 源文件->记号流 方法: 1. 手工构造 2. 自动构造 手工构造: 实现标识符与关键字通过转移图完成. 然后再通过hashtable特判即可. 自动构造: Thompson算法将正则表达式转化为NFA 五种情况,两种基本的直接构造,三种复合的递归构造 子集构造算法 NFA-DFA stack = []//遍历的结构 Q = []//所以的DFA状态,判重 D[,] = []//DFA结果 push( ε闭包(n0)) //将起始点做为q0 loop until stack==NULL

易位构词EOJ3451【字符串】【思维题】【模拟】

http://acm.ecnu.edu.cn/problem/3451/ 官方题解: 我们可以先考虑字符串有序的情况,比如是 aaabcc,我们只要将字符串右移 3 位,变成 bccaaa,就做完了.那么对于无序的情况,我们可以通过排序让它有序,做完之后再排回去. 显然最多的字母出现次数大于一半的情况是不行的.否则就将每个字母的位置和字母绑定一下,按字母序对结构体进行排序.然后右移「出现最多的字母出现次数」位,再排回来就可以了. 当时没想到这是模拟,看题解不知道如果是无序的排完序后怎样弄回去..

词法、语法与语义相关知识

概念 http://www.juweixin.com/t/detail/148383 语法到底是什么?有人说语法是语言里的法律.法规:有人说语法是框架结构:还有人说语法就是对前人语言习惯的一种总结.以上这些说法都对,但是又不全对. In linguistics, grammar is the set of structural rules governing the composition of clauses, phrases, and words in any given natural l

汉语-汉字:构/搆/冓

ylbtech-汉语-汉字:构/搆/冓 构,形声,繁体字从木,从冓(gōu),冓亦声.“冓”意为“碰头”.“木”指木材.木条.“木”与“冓”联合起来表示“木条的头部相互衔接”.本义:木工制作 1.返回顶部 1. 中文名:构 拼    音:gòu gōu 释    义:组合制成 示    例:虚构 构思 构想 繁    体:構 目录 1 汉字释义 2 基本解释 3 古籍解释 4 常用词组 2. 2.返回顶部 1. 汉字释义 汉字:构 释义:①组合:制成:构图:构词:结构. ②结成:组织(用於抽象事

atitit.词法分析原理&#160;词法分析器 (Lexer)

atitit.词法分析原理 词法分析器 (Lexer) 1. 词法分析(英语:lexical analysis)1 2. :实现词法分析程序的常用途径:自动生成,手工生成.[1] 2 2.1. 词法分析程序的功能2 2.2. 如何描述词素3 2.3. 单词token3 2.4. Token的类型,根据程序设计语言的特点,单词可以分为五类:关键字.标识符.常量.运算符.界符.以4 2.5. 词法分析的第一阶段即扫描器4 2.6. 词法分析的第二阶段评估器(Evaluator)5 2.7. 例如C语

编译器

http://blog.csdn.net/nic_r/article/details/7835908 词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner)  词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号).词法分析程序实现这个任务.词法分析程序可以使用lex等工具自动生成. 语法分析(Syntax an

语义分析的一些方法

语义分析的一些方法 作者:火光摇曳 语义分析的一些方法(上篇) 语义分析的一些方法(中篇) 语义分析的一些方法(下篇) 语义分析,本文指运用各种机器学习方法,挖掘与学习文本.图片等的深层次概念.wikipedia上的解释:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documen

中文分词技术一:概念

分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各种匹配方法进行的一种技术.当然,我们在进行数据挖掘.精准推荐和自然语言处理工作中也会经常用到中文分词技术. 一.为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分.除此之外,还有最大切分(包括