BLCL的博客小馆

归档 · 2023

首页

关于

归档

编译原理编译器虚拟机JVMANTLR4字节码

自己动手实现一个可以运行在JVM上的编程语言

众所周知,JVM虚拟机被设计为可以执行栈式指令的机器。因此任何一个语言只要编译之后得到的字节码符合JVM的标准,就可以在JVM上执行,例如Kotlin、Groovy、Scala、Clojure。我们自己设计一款语言,并命名为Jinx,它支持类定义、变量定义、变量打印。它的语法解析逻辑如下12345678910111213141516171819202122232425grammar Jinx;@header {package com.nosuchfield.jinx.code;}jinx: CLASS ID LEFT_BR classBody RIGHT_BR EOF;classBody: (variable | print)*;variable: VARIABLE ID EQUALS value;pri..

更多
loading..
PythonPandas

一日一技:从Pandas DataFrame两个小技巧

今天我从网上下载了一批数据。这些数据是Excel格式,我需要把他们转移到MySQL中。这是一个非常简单的需求。正常情况下,我们只需要5行代码就能解决问题:1234567import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('数据库链接URI', echo=False)df = pd.read_excel('Excel文件路径')df.to_sql(name='表名', con=engine)但我发现,这个下载的文件有两个工作簿(Sheet),第一个Sheet叫做Overall,第二个Sheet叫做Result。我们需要的数据在Result这个工作簿中。那么,在使用Pandas读取时,需要这样写代码:1df..

更多
loading..
PythonChatGPT

一日一技:如何同时使用多个GPT的API Key?

相信很多同学或多或少都在Python中使用过GPT API,通过Python安装openai库,来调用GPT模型。OpenAI官方文档中给出了一个示例,如下图所示:如果你只有一个API账号,那么你可能不觉得这样写有什么问题。但如果你想同时使用两个账号怎么办?有些同学可能知道,微软的Azure也提供GPT接口,在Python中也需要通过openai库来调用,它的调用示例为:当你全局设置了openai.api_type = 'azure'以后,你怎么同时使用OpenAI的GPT接口?这两个文档中给出的示例写法,都是全局写法,一但设定以后,在整个运行时中,所有调用GPT接口的地方,都会使用这里设置的参数:123import openaiopenai.xx = yy有些同学不知道怎么在Python SDK中同时使..

更多
loading..
PythonPDF

一日一技:从PDF完美提取表格

在之前很长一段时间,从PDF文件中提取表格都是一个老大难的问题。无论你使用的是PyPDF2还是其他什么第三方库,提取出来的表格都会变成纯文本,难以二次利用。但现在好消息来了,专业处理PDF的第三方库PyMuPDF升级到了1.23.0,已经支持完美提取PDF中的表格了。还可以把表格转换为Pandas的DataFrame供你分析。PyMuPDF的使用非常简单,首先我们来安装:1pip install pymupdf pandas openpyxl其中安装pandas是为了能让它转成DataFrame,安装openpyxl是为了能把结果导出为Excel。我们来看一个测试的PDF文件,如下图所示:其中表格在第5页,那么我们编写如下代码,读取第五页的表格:1234567import fitzdoc = fitz.o..

更多
loading..
GitLabSynology

群晖6.2.4 安装GitLab

Foreword 折腾一下群晖,上一次折腾已经是2020年了。 硬件升级 硬盘扩容 最初没考虑那么多,使用的是RAID1,两个4T盘,实际可用比4T小一点,一直也没用满。 由于后续有大量视频素材存储,所以这点内容完全不够看了,需要扩容。组了4张8T盘,打算切换成RAID5。 DS918+只有4盘位,所以实际操作是先插入2个8T盘,进行扩容。 群晖本身早就考虑到了扩容和各种替换盘的情况,自带的帮助中都有各种情况的说明,第一步就是插入2个8T,扩容,然后将当前的盘从RAID0转换到RAID5。 这个大概花了一两个小时就完成了。 接着就是抽掉一个4T盘,插入一个新8T,进系统以后会提示修复,修复即可。这个时间非常长,大概要2天的样子,如果数据多估计就要更久了。 最后就是再抽掉一个4T..

更多
loading..
GitLabSynology

群晖6.2.4 安装GitLab和硬件升级

Foreword 折腾一下群晖,上一次折腾已经是2020年了。 硬件升级 硬盘扩容 最初没考虑那么多,使用的是RAID1,两个4T盘,实际可用比4T小一点,一直也没用满。 由于后续有大量视频素材存储,所以这点内容完全不够看了,需要扩容。组了4张8T盘,打算切换成RAID5。 DS918+只有4盘位,所以实际操作是先插入2个8T盘,进行扩容。 群晖本身早就考虑到了扩容和各种替换盘的情况,自带的帮助中都有各种情况的说明,第一步就是插入2个8T,扩容,然后将当前的盘从RAID0转换到RAID5。 这个大概花了一两个小时就完成了。 接着就是抽掉一个4T盘,插入一个新8T,进系统以后会提示修复,修复即可。这个时间非常长,大概要2天的样子,如果数据多估计就要更久了。 最后就是再抽掉一个4T..

更多
词法分析语法分析编译原理编译器ANTLR

使用ANTLR4格式化JSON

JSON由对象和数组组成,对象是一个Key和Value的关系映射,数组则是由多个value组成。对象使用大括号{}表示,数组则使用中括号[]表示。因此我们可以得到对象和数组的表达式object: '{' '}' | '{' kv (',' kv)* '}';array: '[' ']' | '[' v (',' v)* ']';其中kv表示一个KeyValue的关系映射,多个KeyValue中间使用逗号,分割,一个对象可以不包含元素,或者包含一个或多个元素。v表示一个元素,数组的多个元素中间同样使用,分割,数组可以没有元素,也可以包含一个或多个元素。kv由key和value组成,key只需要是一个字符串就可以,而对象的value和数组的value一样,支持以下多种元素对象数组文本数字truefalsenu..

更多
12