C-minus语言词法编译器功能实现

版权申诉
0 下载量 167 浏览量 更新于2024-11-06 收藏 197KB RAR 举报
资源摘要信息:"C-minus词法编译器是专门设计用来处理C-minus语言的编译过程中的词法分析阶段。C-minus是一种简化版的C语言,通常用于教学目的,帮助学生理解和学习编译原理和程序设计语言的基础。C-minus词法编译器能够识别C-minus语言的关键字、标识符、常量、运算符等基本语言元素,并将它们转化为一系列的词法单元(tokens),为后续的语法分析和编译过程提供基础输入。 C-minus语言保留了C语言的基本结构,但去除了一些复杂的特性,简化了语法,因此,C-minus词法编译器的复杂性也相应降低。它通常不处理复杂的运算符优先级和类型系统,这样可以让学习编译原理的学生更专注于词法分析和语法分析的学习。 编译器的整个过程大致可以分为以下几个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。词法分析是整个编译过程的第一步,也是理解编译原理的基础。在这个阶段,编译器读取源代码,并将其分解为一系列的词法单元。这些单元包括关键字、标识符、常量、字符串字面量、运算符和分隔符等。 为了实现这些功能,C-minus词法编译器需要具备以下知识点: 1. 正则表达式:编译器前端处理的第一步是使用正则表达式来定义语言的词法规则,从而能够识别不同类型的词法单元。 2. 有限自动机(Finite Automata):包括确定有限自动机(DFA)和非确定有限自动机(NFA),它们是实现词法分析的关键理论模型。通过这些自动机模型,编译器可以准确地从输入字符流中识别出词法单元。 3. 词法分析器(Lexer或Scanner):这个词法分析器是一个将源代码文本分解为词法单元的程序或函数。它通常由一些预定义的规则集和模式匹配逻辑组成,用于执行词法分析的任务。 4. 工具和技术:如flex(快速词法分析器生成器),它是Unix系统下的一个工具,可以用来生成Cminus词法编译器的词法分析部分。 5. 编译器设计原则:包括理解编译器的各个阶段,以及如何将源代码从一种形式转换成另一种形式的基本原理。 6. C-minus语言规范:理解C-minus语言的语法和语义,特别是它的词法规则,以便于实现相应的词法分析器。 7. 错误处理:在词法分析过程中,编译器需要能够识别并报告源代码中的错误,这可能包括拼写错误、不匹配的符号等。 C-minus词法编译器作为一个教学工具,对于计算机科学专业或相关领域的学生来说,是非常有价值的。它帮助学生构建一个实际的编译器,并理解编译器从源代码到目标代码的整个工作流程。通过实践操作,学生可以更直观地理解编译原理的概念,提升对编程语言深层原理的理解。"

import pandas as pd import warnings import sklearn.datasets import sklearn.linear_model import matplotlib import matplotlib.font_manager as fm import matplotlib.pyplot as plt import numpy as np import seaborn as sns data = pd.read_excel(r'C:\Users\Lenovo\Desktop\data.xlsx') print(data.info()) fig = plt.figure(figsize=(10, 8)) sns.heatmap(data.corr(), cmap="YlGnBu", annot=True) plt.title('相关性分析热力图') plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif'] = 'SimHei' plt.show() y = data['y'] x = data.drop(['y'], axis=1) print('************************输出新的特征集数据***************************') print(x.head()) from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42) def relu(x): output=np.maximum(0, x) return output def relu_back_propagation(derror_wrt_output,x): derror_wrt_dinputs = np.array(derror_wrt_output, copy=True) derror_wrt_dinputs[x <= 0] = 0 return derror_wrt_dinputs def activated(activation_choose,x): if activation_choose == 'relu': return relu(x) def activated_back_propagation(activation_choose, derror_wrt_output, output): if activation_choose == 'relu': return relu_back_propagation(derror_wrt_output, output) class NeuralNetwork: def __init__(self, layers_strcuture, print_cost = False): self.layers_strcuture = layers_strcuture self.layers_num = len(layers_strcuture) self.param_layers_num = self.layers_num - 1 self.learning_rate = 0.0618 self.num_iterations = 2000 self.x = None self.y = None self.w = dict() self.b = dict() self.costs = [] self.print_cost = print_cost self.init_w_and_b() def set_learning_rate(self,learning_rate): self.learning_rate=learning_rate def set_num_iterations(self, num_iterations): self.num_iterations = num_iterations def set_xy(self, input, expected_output): self.x = input self.y = expected_output

2023-06-07 上传

import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from scipy.spatial.distance import cdist import matplotlib.pyplot as plt from pandas import DataFrame from sklearn.decomposition import PCA plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 pd.set_option('display.max_rows', None)#显示全部行 pd.set_option('display.max_columns', None)#显示全部列 np.set_printoptions(threshold=np.inf) pd.set_option('display.max_columns', 9000) pd.set_option('display.width', 9000) pd.set_option('display.max_colwidth', 9000) df = pd.read_csv(r'附件1.csv',encoding='gbk') X = np.array(df.iloc[:, 1:]) X=X[0:,1:] k=93 kmeans_model = KMeans(n_clusters=k, random_state=123) fit_kmeans = kmeans_model.fit(X) # 模型训练 #查看聚类结果 kmeans_cc = kmeans_model.cluster_centers_ # 聚类中心 print('各类聚类中心为:\n', kmeans_cc) kmeans_labels = kmeans_model.labels_ # 样本的类别标签 print('各样本的类别标签为:\n', kmeans_labels) r1 = pd.Series(kmeans_model.labels_).value_counts() # 统计不同类别样本的数目 print('最终每个类别的数目为:\n', r1) # 输出聚类分群的结果 # cluster_center = pd.DataFrame(kmeans_model.cluster_centers_, # columns=[ str(x) for x in range(1,94)]) # 将聚类中心放在数据框中 # cluster_center.index = pd.DataFrame(kmeans_model.labels_). \ # drop_duplicates().iloc[:, 0] # 将样本类别作为数据框索引 # print(cluster_center)代码解释

2023-06-13 上传