Typora主题推荐与修改
CompilerBagel-Make our compiler(SysY2022 to RISC-V asm)
项目地址:https://github.com/CompilerBagel/CompilerBagel
本项目为2023 年华为毕昇杯 CompilerBagel 组参赛作品,基于Java语言和Antlr框架,实现从SysY2022语言(C语言的子集)到RISC-V架构下汇编语言的完整编译器。
项目整体流程:词法、语法分析->中间代码生成->目标代码生成->寄存器分配->代码优化
Lexer and Parser
一个现代的编译器,总是从词法分析器(lexer)和语法分析器(Parser)开始。如今,词法分析和语法分析技术已经相当成熟,有许多现成的工具可以帮助我们自动生成词法分析器和语法分析器。这里我们选用Antlr作为编译器前端生成的工具。
Write a g4 file
我们需要为SysY2022语法编写词法和语法的g4文件,例如(节选)
SysYLexer.g4:
1 | IDENT : (LETTER | '_') (LETTER | DIGIT | '_')* ; |
Java编程规范
基本语句
- switch语句要有default分支,除非switch的条件变量是枚举类型
- if-else if类型的条件判断,最后应包含一个else分支
- 不能用浮点数作为循环变量
类的使用
覆写时要加上@override注解
原因:
- 如果覆写时因为疏忽,导致子类方法的参数同父类不一致,编译时会报错,使问题在编译期就被发现。
- 如果父类修改了方法的定义造成子类不再覆写父类方法,也能使问题在编译期尽早被发现。
未使用@override
注解可能难以发现的错误:
1 | public class Vehicle { |
操作系统实验lab3
操作系统实验lab3
本实验为南京大学软件学院操作系统课程第三次实验,本文是实验完成后的回顾总结,也可作为本实验的指南。
实验要求
在nasm + bochs平台上完成一个接受键盘输入,回显到屏幕上的程序
功能要求
基本功能
- 从屏幕左上角开始,以白色显示键盘输入的字符。可以输入并显示 a-z,A-Z 和
0-9 字符。
大小写切换包括 Shift 组合键以及大写锁定两种方式。大写锁定后再用 Shift组合键将会输入小写字母
支持回车键换行。
支持用退格键删除输入内容。
支持空格键和 Tab 键(4 个空格,可以被统一的删除)
每隔 20 秒左右, 清空屏幕。输入的字符重新从屏幕左上角开始显示。
要求有光标显示, 闪烁与否均可, 但⼀定要跟随输入字符的位置变化。
不要求支持屏幕滚动翻页,但输入字符数不应有上限。
不要求支持方向键移动光标。
C语言嵌入汇编代码
写在前面
在靠近底层方面的编程,C语言具有Java、Python都不具有的优势——直接操作内存。即使这样,仍然有一些操作需要“汇编代码”的帮助,例如对具体寄存器的操作,实现指令的原子性等。因此,C和汇编的混合编程在实际程序中很重要(也成为了C语言项目移植的难题)。
参考文章
arm 嵌入汇编 - 知乎 (zhihu.com)包含起来即可,对应的汇编指令就会被执行。)
C语言嵌入汇编代码
asm代码
在C语言中嵌入汇编代码由gcc编译器实现,gcc提供了asm
和__asm__
关键字,asm
是__asm__
的别名。最简单的使用方法:
1 | asm("mov r1, r2") |
上面的代码实现了将寄存器r2的值复制给寄存器r1
然而,寄存器r1, r2可能已经被使用,我们需要更安全、更有意义地使用汇编语言。
2023科协第二次MINI内训
2022科协第一次内训
HTML+CSSNotes
HTML+CSS Notes
HTML基础
Web标准
构成 | 语言 | 说明 |
---|---|---|
结构 | HTML | 页面元素和内容 |
表现 | CSS | 页面元素的外观和位置等页面样式(如:颜色、大小等) |
行为 | JavaScript | 网页模型的定义和页面交互 |
HTML骨架
1 | <!DOCTYPE html> |
在VScode中,输入
!
并按键盘上的Tab键可快速生成Html的骨架代码。
HTML基本语法
注释
浏览器执行代码时会忽略所有的注释
Vscode中快捷键:
Ctrl + /
1 | <!-- 这是一段注释 --> |
深度学习笔记(数学基础)
神经网络基本原理
得分函数
$
f(x;W)=Wx=\begin{pmatrix}W_{1}&W_{2}&… &W_{n}\\\end{pmatrix}\begin{pmatrix}x_{1}\\x_{2}\\ … \\x_{n}\end{pmatrix}=\sum^{n}_{i=1}{W_{i}x_{i}}
$
$
f(x;W)=Wx=\begin{pmatrix}W_{11}&W_{12}&… &W_{1n}\\W_{21}&W_{22}&… &W_{2n}\end{pmatrix}\begin{pmatrix}x_{1}\\x_{2}\\ … \\x_{n}\end{pmatrix}=\begin{pmatrix}Y_{1}\\Y_{2}\end{pmatrix}
$
结果的行数表示类别数,x向量表示训练数据,W为权重参数
线性函数:$f(x;W)=Wx+b(偏置参数矩阵)$
如何根据$\begin{pmatrix}Y_{1}\\Y_{2}\\ … \\Y_{m}\end{pmatrix}$求得对应类别的概率?归一化
$P(Y=k|X=x_{i})=\frac{e^{s_{k}}}{\sum_{j}{e^{s_{j}}}}$
总结:先求指数,再求所占分数