单词

作业5 词法分析程序的设计与实现

别来无恙 提交于 2019-12-01 02:52:45
词法分析程序( Lexical Analyzer )要求: - 从左至右扫描构成源程序的字符流 - 识别出有词法意义的单词( Lexemes ) - 返回单词记录(单词类别,单词本身) - 滤掉空格 - 跳过注释 - 发现词法错误 程序结构: 输入:字符流(什么输入方式,什么数据结构保存) 处理: –遍历(什么遍历方式) –词法规则 输出:单词流(什么输出形式) –二元组 单词类别: 1.标识符(10) 2.无符号数(11) 3.保留字(一词一码) 4.运算符(一词一码) 5.界符(一词一码) 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14 ( 27 * 15 ) 28 / 16 # 0 代码如下: //引入头文件 #include<stdio.h> #include<stdlib.h> #include<string.h> //声明变量 char prog[800],token[8]; //程序段 单词 char ch; //单词中的字符 int syn,p,m=0; //单词符号种别码 指针p int n,sum=0; //整数sum char *word[6]

[C++]重复单词统计

偶尔善良 提交于 2019-12-01 02:41:17
//textquery.h #pragma once #ifndef TEXTQUERY_H_ #define TEXTQUERY_H_ #include <vector> #include <memory> #include <map> #include <set> #include <string> #include <iostream> #include <fstream> #include <sstream> using namespace std; class QueryResult; class TextQuery { public: using line_no = std::vector<std::string>::size_type; TextQuery(std::ifstream&); QueryResult query(const std::string&) const; private: std::shared_ptr<std::vector<std::string>> file; std::map<std::string, std::shared_ptr<std::set<line_no>>> wm; }; #endif // !TEXTQUERY_H_ //textquery.cpp #include "pch.h" #include "textquery

文本生成器

♀尐吖头ヾ 提交于 2019-12-01 02:21:28
https://loj.ac/problem/10063 题目描述   给出N个单词和文本长度M,求有多少文本满足其内至少包含一个单词,答案对10007取余。 思路   直接求满足的文本比较困难,我们考虑求答案的补集,也就是不包含任何一个单词的文本串的数量。对于这个答案我可以用dp求解,但考虑对单词的查找我们需要用AC自动机解,因此题目就比较明显了——AC自动机上跑dp,我们用dp[i][j]表示文本长度为i,文本的最后一个字符位于Trie图上的节点编号时的方案数。所以转移方程就比较简单了,dp[i+1][u]+=dp[i][v](u能从v转移过来),而这个方程的求法与区间dp类似,我们第一重枚举长度,因为每一个解必定由更短的长度转移过来。   不过有点必须阐明,我们虽然在dp方程中有一维枚举的是Trie图上的节点编号,实际还是每一个字母,但有一个类似匹配的过程,因此这个dp方程是正确的,它必定不会包含重复的状态,也就可以求出正确答案。 答案 #include<bits/stdc++.h> using namespace std; const int mod=10007; int ch[6100][26],tot=1; bool ed[6100]; void insert(char *s) { int u=1,len=strlen(s); for(int i=0;i<len;i++

05 词法分析程序的设计与实现 10/10

社会主义新天地 提交于 2019-12-01 02:01:23
词法分析程序( Lexical Analyzer )要求: - 从左至右扫描构成源程序的字符流 - 识别出有词法意义的单词( Lexemes ) - 返回单词记录(单词类别,单词本身) - 滤掉空格 - 跳过注释 - 发现词法错误 程序结构: 输入:字符流(什么输入方式,什么数据结构保存) 处理: –遍历(什么遍历方式) –词法规则 输出:单词流(什么输出形式) –二元组 单词类别: 1.标识符(10) 2.无符号数(11) 3.保留字(一词一码) 4.运算符(一词一码) 5.界符(一词一码) 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14 ( 27 * 15 ) 28 / 16 # 0 1、代码 #include<stdio.h> #include<string.h> #include<stdlib.h> char wsym[80],ssym[8]; //wsym用于存放输入数组,ssym用于存放输出数组 char ch; int row,syn,sum,m,i,p; char *word[6]={"begin","if","then","while","do",

构建之法20190926-1 选题展示

喜欢而已 提交于 2019-11-30 22:34:42
本作业要求参见 https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677 一:文案+美工展示   文案:     你还在为四六级日夜苦学么?     你还在为背单词捶胸顿足么?     你还在沉迷游戏无法自拔么?     你还在经历一次次的背单词的挫败么?     盛年不重来,一日难在晨;     及时当勉励,岁月不待人;     只需小操作,单词高效记;     零碎时间充分用,睡前玩玩记忆好;     高效学习益处大,不用纸笔枯燥背;     从此手机不离手,单词游戏随时有;     游戏记忆不枯燥,单词不需纸笔背;     单词记忆无难事,所有痛苦去狗带;     快来使用别吃错喽小游戏,从此单词记忆没烦恼!   美工:   (1)开始界面      (2)游戏界面      (3)结算页面      (4)排行榜页面         NABCD       N(Need 需求):         1.目前很多学生在记单词方面比较苦恼,学生会在记单词时将单词拼写的顺序记混。          2.目前微信小程序上的游戏深受大众的欢迎。       A (Approach 做法):         我们会做一个微信小游戏,将单词分为正确单词和错误单词,吃到正确单词才能继续游戏。       B (Benefit 好处)

CRF系列——一个简单的例子

我与影子孤独终老i 提交于 2019-11-30 22:05:28
CRF可以应用于对一串序列进行自动标注的问题。例如对文字序列进行词性标,即要自动判断句子中每个单词的词性。在这样的问题中,每一个词的标注结果,不仅依赖于该词语本身,还会依赖于其他词语的标注结果。CRF可以考虑到这样的依赖关系。 本文会以一个词性标注的应用为例,介绍CRF所解决的问题以及CRF模型的建立,学习与预测过程。 任务描述 词性标注 (part-of-speech tagging),其目标就是对一个句子即一串单词的序列进行打标签(tagging),标注每个词的词性(ADJECTIVE, NOUN, PREPOSITION, VERB, ADVERB, ARTICLE)。我们假设在词性标准任务中, 每个单词的词性不仅依赖其本身,而且也会依赖其前一个单词 (这里做了简化,实际上每个单词的标注结果依赖更多东西)。 下面,我将针对对这个问题,建立一个简单的线性链条件随机场(linear-chain CRF)。并介绍这个CRF是如何表示上述的依赖关系,以及如何利用这个CRF来求解这个问题。 实际上,和其他的统计机器学习模型一样,我们有三个任务要完成: 1)指定模型参数(建立模型) 2)估计这些参数(学习) 3)利用这些参数进行预测(预测) 第一个任务——建立模型 特征函数 为了评价序列中每个单词属于各个tag的可能性,我们要根据单词的位置定义一系列 特征函数 (feature

CRF系列——一个简单的例子

对着背影说爱祢 提交于 2019-11-30 22:05:19
CRF可以应用于对一串序列进行自动标注的问题。例如对文字序列进行词性标,即要自动判断句子中每个单词的词性。在这样的问题中,每一个词的标注结果,不仅依赖于该词语本身,还会依赖于其他词语的标注结果。CRF可以考虑到这样的依赖关系。 本文会以一个词性标注的应用为例,介绍CRF所解决的问题以及CRF模型的建立,学习与预测过程。 任务描述 词性标注 (part-of-speech tagging),其目标就是对一个句子即一串单词的序列进行打标签(tagging),标注每个词的词性(ADJECTIVE, NOUN, PREPOSITION, VERB, ADVERB, ARTICLE)。我们假设在词性标准任务中, 每个单词的词性不仅依赖其本身,而且也会依赖其前一个单词 (这里做了简化,实际上每个单词的标注结果依赖更多东西)。 下面,我将针对对这个问题,建立一个简单的线性链条件随机场(linear-chain CRF)。并介绍这个CRF是如何表示上述的依赖关系,以及如何利用这个CRF来求解这个问题。 实际上,和其他的统计机器学习模型一样,我们有三个任务要完成: 1)指定模型参数(建立模型) 2)估计这些参数(学习) 3)利用这些参数进行预测(预测) 第一个任务——建立模型 特征函数 为了评价序列中每个单词属于各个tag的可能性,我们要根据单词的位置定义一系列 特征函数 (feature

编译原理之词法分析程序的设计与实现

夙愿已清 提交于 2019-11-30 21:15:08
一、程序要求(以python为例)。 1.词法分析程序( Lexical Analyzer )要求: - 从左至右扫描构成源程序的字符流 - 识别出有词法意义的单词( Lexemes ) - 返回单词记录(单词类别,单词本身) - 滤掉空格 - 跳过注释 - 发现词法错误 2.程序结构: 输入:字符流(什么输入方式,什么数据结构保存) 处理: –遍历(什么遍历方式) –词法规则 输出:单词流(什么输出形式) –二元组 3.单词类别: 1.标识符(10) 2.无符号数(11) 3.保留字(一词一码) 4.运算符(一词一码) 5.界符(一词一码) 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14 ( 27 * 15 ) 28 / 16 # 0 二、代码实现(以python为例)。    1.词法分析程序。 1 import re 2 3 strs = "if sum >= 1000 then x : x - 1;#"+" " 4 5 types = {'begin':1, 6 'if':2, 7 'then':3, 8 'while':4, 9 'do':5, 10

单词

℡╲_俬逩灬. 提交于 2019-11-30 19:40:09
https://loj.ac/problem/10060 题目描述   给出若干单词,要求求出每个单词在文章(文章由这些单词构成)中的出现次数。 思路   题意有一点毒瘤,不过这道题显然需要用AC自动机,我们要解决的就是如何维护每个单词的出现次数。这里我们需要用到fail树统计答案。我们考虑对fail数组所建成的图,显然它的根节点为0,并且每个节点只有一条出边。所以我们所以我们每个单词的答案就是fail树中其子树的权值和,权值即为经过次数。   对fail树的处理可以有两种:   ①像我一样,没有发现bfs找next数组时规律,直接暴力重新建树,dfs求子树和。   ②我们考虑bfs搜索时队列中的深度依次增大,而next[v]的深度一定小于v,所以可以倒着把队列中的数处理一遍即可。 代码 #include <bits/stdc++.h> using namespace std; const int MAXN=1e6+5; int ch[MAXN][26],siz[MAXN],fail[MAXN],ed[MAXN],tot; char s[MAXN]; int nxt[MAXN],head[MAXN],to[MAXN],sum; void add_edge(int x,int y) { nxt[++sum]=head[x]; head[x]=sum; to[sum]=y; }

LeetCode--139--单词拆分(python)

 ̄綄美尐妖づ 提交于 2019-11-30 19:31:05
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 示例 2: 输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。 注意你可以重复使用字典中的单词。 示例 3: 输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false 1 class Solution: 2 def wordBreak(self, s: str, wordDict: List[str]) -> bool: 3 dp = [False for _ in range(len(s)+1)] 4 dp[0]=True 5 for i in range(1,len(s)+1