首页 > 其他分享 >NJU-ICS 2024学习随笔PA1_3(正则表达式)

NJU-ICS 2024学习随笔PA1_3(正则表达式)

时间:2024-09-22 23:23:10浏览次数:1  
标签:PA1 匹配 字符 正则表达式 2024 rules token TK NJU

2024-09-22

确实这一块比前面有点难了,先看看这make_token函数在哪。

nemu目录下执行指令grep -r "make_token",就可以得到这个函数所在路径。

然后看到enumrule,结合文章可知,这里就是添加规则的地方。

先学一下正则表达式语法

正则表达式语法

  • .:匹配任意字符(除了换行符)
  • *:匹配前一个字符零次或多次
  • +:匹配前一个字符一次或多次
  • ?:匹配前一个字符零次或一次
  • ^:匹配字符串开头
  • $:匹配字符串结尾
  • []:匹配括号内任意字符
  • ():创建一个捕获组
  • \\:一个 \ 是转义字符,两个 \  是表示匹配后面紧跟的字符

enum里面更改为

enum {
  TK_NOTYPE = 0,  // " "
  TK_EQ     = 1,  // ==

  /* TODO: Add more token types */
  TK_LEFT   = 2,  // (
  TK_RIGHT  = 3,  // )

  TK_PLUS   = 4,  // +
  TK_MINUS  = 5,  // -
  TK_MUL    = 6,  // *
  TK_DIV    = 7,  // /

  TK_AND    = 8,  // &&
  TK_OR     = 9,  // ||
  TK_XOR    = 10, // ^

  TK_AR     = 11, // access register
  TK_PD     = 12, // pointer dereference

  TK_NUM    = 13, // number
  TK_HEX    = 14, // hexadecimal
};

rule里面更改为

static struct rule {
  const char *regex;
  int token_type;
} rules[] = {

  /* TODO: Add more rules.
   * Pay attention to the precedence level of different rules.
   */

  {" +", TK_NOTYPE},    // spaces
  {"==", TK_EQ},        // equal

  {"\\(", TK_LEFT},     // left bracket
  {"\\)", TK_RIGHT},    // right bracket

  {"\\+", TK_PLUS},     // plus
  {"\\-", TK_MINUS},    // minus
  {"\\*", TK_MUL},      // multiply
  {"\\/", TK_DIV},      // divide

  {"&&", TK_AND},       // and
  {"||", TK_OR},        // or
  {"^", TK_XOR},        // xor

  {"\\$[a-z]?[0-9]+", TK_AR},   // access register

  {"[0-9]+", TK_NUM},   // number
  {"0[xX][0-9a-fA-F]+", TK_HEX}, // hexadecimal
};

这里解释一下关于访问寄存器部分。可以找到nemu/src/isa/riscv32/reg.c这里关于寄存器的命名。除了一个$0其余都符合一个字符+一个数字的命名方式,所以就这样写了。

剩下一个存token的地方明天再说吧,不早了,得睡觉了。反正后面都得测试,现在对不对也问题不大

标签:PA1,匹配,字符,正则表达式,2024,rules,token,TK,NJU
From: https://www.cnblogs.com/jiayou-cdr/p/18426102

相关文章

  • 【面试经验】大疆2024届秋招控制算法岗笔试
    建议之后想进大疆控制方向的学弟学妹们,准备好以下几点,笔试挂掉的血泪教训:1、经典控制理论和现代控制理论经典控制里面的拉式变换、传递函数建立、稳定性裕量、稳定性判据、系统校正和零极点配置,要熟练掌握;现代控制理论里面根据动态系统列状态空间方程,观测器估计器收敛性分......
  • 2024/09/22:TypeScript 学习笔记二
    1、类型注解在TypeScript中,可以使用类型注解来明确标识类型。如:constgreeting:string='helloworld' 2、类型检查静态类型检查:在程序编译时进行——(两种静态类型检查模式:非严格类型检查【默认方式】;严格类型检查)动态类型检查:在程序运行时进行3、TypeScri......
  • SOLIDWORKS 2024 基准轴
       ......
  • 【地平线2024秋招内推】
    【地平线2024秋招内推】【关于我们】地平线是市场领先的乘用车高级辅助驾驶(ADAS)和高阶自动驾驶(AD)解决方案供应商【内推码】kbrfck【内推码】kbrfck【内推码】kbrfck【投递链接】:https://wecruit.hotjob.cn/SU62d915040dcad43c775ec12c/mc/position/campus?acotycoCode=......
  • 2024 秋季模拟赛题解
    2024秋季模拟赛题解CSP-S模拟赛2024.9.8CSP-S模拟赛28T1签到题。对\(b\)分解质因数后便容易求解。T2考虑枚举\(\gcd(S)\)的取值\(x\),则\(\operatorname{lcm}(S)=m-x\)。那么同时变形\(\gcd\)和\(\operatorname{lcm}\)变为\(\gcd(S)=1,\operatorname{lcm}......
  • 【2024.09.15】NOIP2024 赛前集训(2)
    【2024.09.15】NOIP2024赛前集训(2)A最大的难点戏剧性地变成了二叉搜索树是什么。先根据已知序列把二叉树建出来,忘了二叉搜索树的移步二叉搜索树&平衡树-OIWiki(oi-wiki.org)根据题意,想到dp计数,\(f[u]\)表示\(u\)子树内的答案,则有转移:\[f[u]=f[lson]\timesf[r......
  • 2024“华为杯”数模研赛E数据提取代码
    2024年数学建模研究生赛E题从视频中提取数据的代码。主要包括三个部分:车流量计算、各车道车流量计算和平均速度计算。主要讲述了代码的使用方法,包括需要修改的参数和文件路径,以及一些特殊情况的处理方法。同时还提供了参数估计和绘图的相关代码,以及如何根据不同视频视角调整代码......
  • 2024.9.20 近期练习
    CF461EApplemanandaGame我们可以先建出SAM,设\(dp_{i,u}\)表示当前处理到\(i\)位,SAM上到\(u\)节点当前最小答案。由于答案具有单调性,考虑二分答案,也就是二分\(mid\),考虑如何检验最短的串是否不超过\(\len\)。考虑把SAM修改一下,若某点不存在\(c\)的出边就将其......
  • 小美的数组合并(美团20240427年暑期实习笔试真题)
    题目:小美的数组合并小美拿到了一个数组,她每次操作可以将两个相邻元素ai合并为一个元素,合并后的元素为原来两个元素之和。小美希望最终数组的最小值不小于k。她想知道有多少种不同的合并结果?输入描述第一行输入两个正整数n,k,代表数组大小和数组的最大值。第二行输入个正整数ai,......
  • 2024 CSP-S 游记
    CSP-S第一轮(初赛)摘自Shadow-Dragon9.20(day0)疯狂星期五,狂砍10节奥赛,直接爽了上午第二节到第五节都是奥赛,来机房以后发现网没开,消费股:看同学们初赛都准备得挺辛苦的,给你们安排一场模拟赛可能是觉得初赛太容易我们没人过不了遂安排了一场模拟赛,像是消费股能干出来的赛时......