陆玺文《系统软件开发实践》实验11:Flex内置变量与函数应用

需积分: 0 0 下载量 36 浏览量 更新于2024-08-05 收藏 962KB PDF 举报
《计科17-6班-陆玺文-03170908-实验11》是一份关于系统软件开发实践的课程设计报告,由中国矿业大学计算机学院2017级本科生陆玺文完成,专注于编译器设计中的词法分析和语法分析部分。该报告的主要内容围绕Flex与Bison这两个工具展开, Flex主要用于词法分析,Bison则负责语法分析。 在实验一中,学生首先需要阅读《Flex/Bison.pdf》的前两章,了解Flex的基本知识,特别是如何使用Flex编写词法扫描器,用于统计输入文本文件的字符数、单词数和行数。这涉及到程序的组成、模式匹配原理以及灵活使用内置的变量和函数。在编程过程中,学生会遇到环境配置和代码验证环节,包括在Windows系统下利用集成开发环境进行安装和运行,而在Linux环境下则需要手动配置。 具体步骤包括: 1.1 实验内容: - 学习Flex的基础概念,如词法规则的定义和执行过程。 - 设计一个简单的词法扫描器,实现对特定文本的识别和统计功能。 1.2 环境配置与代码验证: - 在Windows平台,学生需要安装Flex与Bison的集成开发环境,并通过下载链接获取和配置相关工具。 - 在Linux环境下,要求学生自行配置编译环境以确保Flex脚本的正确编译和执行。 1.3 Lex代码分析: - 分析LEX代码结构,包括程序的入口点、定义的变量和函数,以及如何根据输入文本匹配不同的模式。 1.3.4 变量与函数: - 描述Flex内置变量(如yytext, yylineno等)的用途,以及如何利用它们在模式匹配过程中处理信息。 1.4 实验感悟: - 总结实验过程中的体会,可能包括对编译原理的理解深化,对Flex和Bison在实际项目中的应用,以及编程技巧的提升。 整个实验不仅要求学生掌握Flex和Bison的基本操作,还旨在培养他们的问题解决能力,使其能理解和遵守计算机职业道德规范。通过这个项目的实施,学生将加深对系统软件开发特别是编译器开发流程的理解,并提高其软件工程实践能力。

#include "mylogin.h" mylogin::mylogin(QWidget *parent) : QDialog(parent) { this->init_ui(); connect(this->bnt_login, &QPushButton::clicked, this, &mylogin::do_login); connect(this->bnt_register, &QPushButton::clicked , this ,&mylogin::do_enroll); } mylogin::~mylogin() { } void mylogin::init_ui() { this->setFixedSize(QSize(600,350)); this->setWindowTitle(tr("岑超升")); this->setWindowIcon(QIcon(":/src/1.png")); this->lb1 = new QLabel(); this->lb2 = new QLabel(); this->lb3 = new QLabel(); this->lb1->setFixedSize(QSize(560,200)); QPixmap pic; pic.load(":/src/2.png"); //this->lb1->setPixmap(pic.scaled(this->lb1->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); this->lb1->setPixmap(QPixmap(":/src/2.png")); this->lb2->setText(tr("用户名:")); this->lb3->setText(tr("密 码:")); this->usr_name_le = new QLineEdit(); //这两个参数后面传入信号中去,然后emit发射出去 this->usr_pass_le = new QLineEdit(); this->usr_pass_le->setEchoMode(QLineEdit::Password); this->bnt_login = new QPushButton(tr("登 陆")); this->bnt_register = new QPushButton(tr("注 册")); this->hb1 = new QHBoxLayout(); this->hb2 = new QHBoxLayout(); this->hb3 = new QHBoxLayout(); this->hb1->addWidget(this->lb2); this->hb1->addWidget(this->usr_name_le); this->hb2->addWidget(this->lb3); this->hb2->addWidget(this->usr_pass_le); this->hb3->addWidget(this->bnt_login); this->hb3->addWidget(this->bnt_register); this->vb1 = new QVBoxLayout(); this->vb1->addWidget(this->lb1); this->vb1->addLayout(this->hb1); this->vb1->addLayout(this->hb2); this->vb1->addLayout(this->hb3); this->setLayout(this->vb1); } void mylogin::do_login() { emit sig_login(usr_name_le->text(), usr_pass_le->text()); //需要把这里输入的账号密码信息发送到myapp那去,用到的函数是emit //需要自定义一个信号,sig_login //这个槽函数能够发出信号 } void mylogin::do_enroll() { emit sig_enroll(); }用C++语言解释并注释每行代码,并说明他们的功能和作用

2023-06-09 上传