编译原理 | 课程设计 — Lex 和 Yacc的使用

news/2024/11/14 19:24:04/

第1关 — 碱基序列里特定碱基比例的计算

1、任务描述

双链DNA分子中,G、C碱基对所占比例越高,其稳定性越强。编写一个lex描述文件,计算指定碱基序列里G、C碱基的比例。

2、编程要求

完成上述编程任务,将C语言源程序复制粘贴到右侧代码编辑器,点击“评测”按钮,运行程序,系统会自动进行结果对比。

3、测试说明

平台会对你编写的代码进行测试:

测试输入:ACGTTGATCGGAATCTTCGT 预期输出:0.450

测试输入:TTACGGTACCAATGCTAATGCCTA 预期输出:0.417

4、代码

#include <stdio.h>
#include <string.h>int main()
{char dna[100];scanf("%s", dna);int length = strlen(dna); int gcCount = 0; for(int i = 0; i < length; i++){if(dna[i] == 'G' || dna[i] == 'C') gcCount++;}double ratio = (double)gcCount / length; printf("%.3f", ratio);return 0;
}

第2关 — 文本串里单词、数字和符号的识别

1、任务描述

编写一个lex描述文件,识别出指定文本串里的单词、数字和符号(空格不作处理)。

2、编程要求

完成上述编程任务,将C语言源程序复制粘贴到右侧代码编辑器,点击“评测”按钮,运行程序,系统会自动进行结果对比。

3、测试说明

平台会对你编写的代码进行测试:

测试输入:

using namespace std;
int main()
{int year = 2022;cout << "hello" << endl;return 0;
}

预期输出:

using 单词
namespace 单词
std 单词
; 符号
int 单词
main 单词
( 符号
) 符号
{ 符号
int 单词
year 单词
= 符号
2022 数字
; 符号
cout 单词
< 符号
< 符号
" 符号
hello 单词
" 符号
< 符号
< 符号
endl 单词
; 符号
return 单词
0 数字
; 符号
} 符号

4、代码

#include<stdio.h>
#include<string.h>
#define   maxn 10000char str[maxn];
void fun(char str[]);
int main() {int i = 0;while ((str[i] = getchar()) != EOF) {i++;}str[i] = '\0';fun(str);return 0;
}void fun(char str[]) {for (int j = 0; str[j] != '\0'; j++) {if (str[j] >= '0' && str[j] <= '9') {while (str[j] >= '0' && str[j] <= '9') {putchar(str[j]);j++;}j--;printf(" 数字\n");continue;} if ((str[j] >= 'a' && str[j] <= 'z') || (str[j] >= 'A' && str[j] <= 'Z')){while ((str[j] >= 'a' && str[j] <= 'z') || (str[j] >= 'A' && str[j] <= 'Z')){putchar(str[j]);j++;}j--;printf(" 单词\n");continue;} if (str[j] == ' '||str[j] == '\n'||str[j]=='	'){continue;} putchar(str[j]);printf(" 符号\n");}}

第3关 — 简易计算器的实现

1、任务描述

编写一个yacc描述文件,实现具有加法和乘法功能的计算器。

2、编程要求

完成上述编程任务,将C语言源程序复制粘贴到右侧代码编辑器,点击“评测”按钮,运行程序,系统会自动进行结果对比。

3、测试说明

平台会对你编写的代码进行测试:

测试输入:5*7+2 预期输出:37

测试输入:9+3*6 预期输出:27

4、代码

#include "task1-3.tab.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>int calculate(int a, int b, char op) {switch(op) {case '+':return a + b;case '-':return a - b;case '*':return a * b;case '/':if (b != 0) return a / b;else return 0;default:return 0;}
}int calculate_expression(char** s) {char op[2];int num, stack[100], top = -1;while (**s && **s != ')') {if (isdigit(**s)) {sscanf(*s, "%d", &num);stack[++top] = num;while (isdigit(**s))(*s)++;}if (**s == '+' || **s == '-' || **s == '*' || **s == '/') {sscanf(*s, "%s", op);if ((*op == '*' || *op == '/') && isdigit(*(*s+1))) {int nextNum;sscanf(*s+1, "%d", &nextNum);stack[top] = calculate(stack[top], nextNum, *op);while (isdigit(*(*s+1)))(*s)++;}else if (top > 0) {int right = stack[top--];int left = stack[top--];stack[++top] = calculate(left, right, *op);}}if (**s == '(') {(*s)++;stack[++top] = calculate_expression(s);(*s)++;}(*s)++;}while (top > 0) {int right = stack[top--];int left = stack[top--];stack[++top] = calculate(left, right, '+');}return stack[0];
}int calculate_expression_with_parentheses(const char* expression) {char* s = (char*)expression;return calculate_expression(&s);
}int main() {char expression[100];fgets(expression, 100, stdin);printf("%d\n", calculate_expression_with_parentheses(expression));return 0;
}


http://www.ppmy.cn/news/252877.html

相关文章

java设计模式(十五)责任链模式

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 责任链模式(Chain of Responsibility) 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有对象能够处理…

主板的简介

主板的另一特点&#xff0c;是采用了开放式结构。主板上大都有6-8个扩展插槽&#xff0c;供PC机外围设备的控制卡(适配器)插接。通过更换这些插卡&#xff0c;可以对微机的相应子系统进行局部升级&#xff0c;使厂家和用户在配置机型方面有更大的灵活性。 总之&#xff0c;主板…

主板结构

主板结构 百科名片 简略主板结构 主板作为其他硬件运行的平台&#xff0c;为电脑的运行发挥联通和纽带的作用。 目录 概念 一、主板板型分类 1、PCAT主板 2、Baby AT主板 3、ATX结构主板 4、MATX结构主板 5、BTX具有如下特点&#xff1a; 6、Mini-ITX结构主板&#xff1a; 二、…

主板类型

主板类型 什么是主板 主板&#xff0c;又叫主机板(mainboard)、系统板(systembourd)和母板(motherboard)&#xff1b;它安装在机箱内&#xff0c;是微机最基本的也是最重要的部件之一。 主板一般为矩形电路板&#xff0c;上面安装了组成计算机的主要电路系统&#xff0c;一般有…

主板bios

目前市面上较流行的主板BIOS主要有 Award BIOS、AMI BIOS、Phoenix BIOS三种类型。 通过Intel授权的全球一共有四家&#xff0c;除了上面说的三家还有一家国产BIOS--Byosoft BIOS。 早期的286、386大多采用AMI BIOS&#xff0c;它对各种软、硬件的适应性好&#xff0c;能保证系…

组装电脑基础知识之主板

前言 本系列文章是为准备自己组装台式机的小伙伴写的关于中央处理器CPU、主板、显卡等部分的参考资料。 一、简介 主板作为计算机CPU、显卡等硬件的载体&#xff0c;各硬件通过主板进行连接成为一个整体从而完成协作。 提示&#xff1a;因为需要考虑主板是否兼容CPU以及能否…

Vue2 vue-cli

安装与卸载vue脚手架 npm i -g vue/cli vue --version 查看vue脚手架版本 vue -V 查看vue脚手架版本 npm uninstall -g vue/cli 卸载 创建项目 vue create 项目名 选择项目 &#xff08;Default 为快速创建项目&#xff09; 选择最后一下&#xff0c;回车 上下键选择 Rou…

【TCP/IP】基于UDP的服务器端/客户端实现 II - 实践与实现

基于UDP的回声服务器端/客户端 结合之前基于TCP实现的回声服务器&#xff0c;我们尝试再用UDP来完成对回声服务器/客户端的设计。 echo_server: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa…