Born to be proud
4/28
2016

词法分析器

编译原理实验课写的词法分析器,加深了对编程语言的理解,将课本上的伪代码实现完善了一遍,纯手打。

/* 编译原理实验-词法分析器
 * 刘嘉琦-20160325
 * 1、PL/0语言的单词结构
//关键字(10个):begin, end ,if ,then, while, do, const, var,call,procedure
//标识符:字母序列,最大长度10
//常数:整型常数
//算符和界符(17个):+, -, *,/,odd,=,<>,<,>,<=,>=,:=,(,) ,, ,.,;
//2、单词的种别划分
//    标识符 作为一种
//    常数 作为一种
//    算符和界符每个单词作为一个单独种别
//3、PL/0的语言的词法分析器将要完成以下工作:
//(1)    跳过分隔符(如空格,回车,制表符);
//(2)    识别诸如begin,end,if,while等保留字;
//(3)    识别非保留字的一般标识符。
//(4)    识别数字序列。
//(5)    识别:=,<=,>=之类的特殊符号。
//4、词法分析器的实现方式:
//    把词法分析器设计成一个独立子程序,以便于语法分析器调用。词法分析器运行一次产生一个单词符号。
//5、词法分析器的输出形式
//   (种别,属性值)
//其中:种别在“2、单词的种别”中进行了定义;
//      属性值:若单词种别只代表唯一单词,属性值为空;
//              若单词种别是SYM_IDENTIFIER,属性值为该单词在标识符表中的位置;
//              若单词种别是SYM_ NUMBER,属性值为该单词在常数表中的位置。
**/

4/15
2016

关于党课学习系统

学校让在线学习党课内容,想到之前学校的四六级报名系统就存在太多安全问题,可以下载全校的免冠照片,尝试着破解了一下党课学习系统
学习系统是要在网页中浏览指定的时间后才可以进行测试,一个章节有两个小时,有几十分钟的,并且每隔五分钟不移动鼠标就停止计时
将网页保存到本地后,发现了名为LearnControl.js的javascrip文件,找到了如下的一段代码

4/7
2016

PHP Session实现用户登陆功能

Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制.由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。

4/4
2016

姿态测算原理

经过信号预处理(滤波、校准等),可得到精准传感器输出信号,进而为精确进行姿态测算提供保障。常用的载体姿态获取方法有:
(1)利用陀螺仪产生的角速度信号,积分求取三轴旋转角度,从而获得物体姿态变化,可用四元数表示;
(2)利用加速度计产生的重力加速度信号和磁力计产生的地磁信号,可分别得到载体航向家、横滚角及航向角,从而得到物体姿态;可通过转换以四元数表示;
(3)多个系统捷联组合进行姿态测算,如通过卡尔曼融合算法,将陀螺仪、加速度计和磁力计产生的信号进行合理融合,角速度信号对动态情况下的物体姿态测算优势明显,而加速度与磁力计可对角速度信号的测算进行不定时修正,从而实现传感器之间的互补,使姿态测算更加精确、更适用于各种环境。
由于陀螺仪存在零偏及长时间使用后信号漂移等现象,如利用第一种方法进行姿态测算,姿态误差会随时间的推移而不断增大,从而导致无法长期稳定的精确信号输出;加速度计及磁力计皆利用地球本身存在的稳定的外部因素产生输出信号,更容易获得物体的绝对姿态,然而在运动过程中,物体同样会产生加速度,对姿态测算造成干扰,而磁力计也易受磁性物质干扰,因此第二种方法适合物体本身运动幅度较小的情况,不利于在物体快速运动时的姿态测算,即动态性能不好。第三种方法对前两种方法进行融合,能够分别发挥两种方法的优势,虽然采用卡尔曼滤波等信息融合技术,增加了运算量,但能在各种运动情况下获取物体精确姿态,是目前捷联导航系统中最常用的姿态测算方法。

3/30
2016

keybd_event函数

keybd_event函数,系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息。
函数原型;void keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
包含4个参数:
第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);
第二个参数为扫描码,一般不用设置,用0代替就行;
第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成”KEYEVENTF_KEYUP”;
第四个参数一般也是置0即可。

//模拟按下'ALT+F4'键
keybd_event(18,0,0,0);
keybd_event(115,0,0,0);
keybd_event(115,0,KEYEVENTF_KEYUP,0);
keybd_event(18,0,KEYEVENTF_KEYUP,0);