首页 > 编程语言 >C#词法分析自动生成器

C#词法分析自动生成器

时间:2024-04-06 14:44:07浏览次数:27  
标签:文件 C# 生成器 词法 文档 lex

C#词法分析自动生成器

前言

在做编译原理实验时,要求使用自动生成器生成词法分析器,老师推荐的是用flex,
但用flex只会生成C代码,自己项目用的又是C#,本来想使用C代码直接生成dll库并用C#调用,
但非常麻烦。干脆找了个能生成C#代码的生成器。

配置

相关的生成器很多,但我能找到的且能成功使用的也就是Gplex了,
这是作者的源码地址
先决条件:
Visual Studio 2022

按以下步骤进行:
1、首先,打开VS,创建项目或打开你已有的项目。右键项目,点击管理Nuget程序包。
image
2、点击浏览,搜索YaccLexTools,并将其安装到项目中。
image
3、依次展开依赖项-包-YaccLexTools-文档,可以看到一个Readme文档,这里作者给出了它的博客地址:https://devnotes.ernstc.net/yacclextools
image
4、作者博客里给出了概述和一个示例,但这里我简要的说明一下使用方法。右键项目添加一个后缀为.lex的文件,用于编写lex源代码,这里我随便写个示例。关于lex文件具体的编写方法,请看查阅文档

%namespace ConsoleApp1
%scannertype LexerScanner
%visibility internal
%tokentype Tag
%option noparser, noembedbuffer

%{
%}

Number      [0-9]+

%%
{Number}		{ return 0; }
%%

%namespace: lex文件编译后会生成一个cs文件,这是定义它的命名空间,这里我就用项目默认的命名空间。
%scannertype: 定义词法分析器类的名字。
%visibility: 定义该类的可见性。
%tokentype:定义Token枚举的名称,随便写就行。
%option:定义编译的选项,这里我要求不生成语法分析器(只生成词法分析器),以及没有嵌入的缓冲区类。
%{     %}: 里面书写你的C#代码。
接着书写你的正则表达式定义
在%% %%之间写识别到正则的操作,这里我返回了0,实际可以返回Token值,或是调用函数。
5、写完lex源码后,右键项目,点击编辑项目文件,插入以下代码:

<ItemGroup>
	<LexFile Include="a.lex">
		<OutputFile>a.cs</OutputFile>
	</LexFile>
</ItemGroup>

LexFile里的include你的lex文件的位置,outuputfiles写输出的文件名。
项目文件如这样:
image
6、运行你的项目即可,会自动生成词法分析器的cs文件。

查阅文档

作者的源码地址里面有一个gplex.pdf文件,这是gplex的使用文档。
文档中稍微重要的部分:
image
以及
image

标签:文件,C#,生成器,词法,文档,lex
From: https://www.cnblogs.com/xiangxun/p/18117339

相关文章

  • 劫持TLS绕过canary pwn89
    劫持TLS绕过canarypwn88首先了解一下这个东西的前提条件和原理前提:溢出字节够大,通常至少一个page(4K)创建一个线程,在线程内栈溢出原理:在开启canary的情况下,当程序在创建线程的时候,会创建一个TLS(ThreadLocalStorage),这个TLS会存储canary的值,而TLS会保存在stack高地址......
  • OccNet 栅格占据网络:重建智能驾驶场景表征
    随着高阶智能驾驶的发展,长尾障碍物感知成为智驾发力的关键点。驾驶场景中常见的行人、车、障碍物,能够通过3D物体检测等方式实现其位置、大小的估计。而现实世界城区的交通路况中,还存在海量长尾场景问题:如异形车辆、路上的石子、掉落的树叶等障碍物,以3D检测框、点云等传统表......
  • 使用pyqt,opencv,matplotlib开发一个图片浏览器!
    使用python开发一个图片浏览器!作用效果代码作用读取图片到界面并显示,对与宽度或高度大于600像素的图片进行等比缩小,让图片适合显示到界面;输出图片的基础信息,大小和颜色通道;绘制图片的单颜色通道直方图;效果颜色直方图有记忆功能,方便做对比代码importcopyimpor......
  • 使用OpenCV和PyQT编写的图片显示器,实现图片选择显示和保存
    使用OpenCV和PyQT编写的图片显示器简要效果代码简要为了避免重复编写pyqt控件,先写好此代码,方便使用。实现了以下基础功能:选择图片显示图片保存图片效果选择图片:显示图片:保存图片:代码importcopyimportcv2importsysfromPyQt5.QtWidgetsimport(......
  • 当我们运行ur机械臂的包的时候我们想要在机械臂的末端加上六维力传感器,但是我们使用ro
    1、前言最近一个月在入门机械臂的控制,由于机械臂大部分都是用的是moveit,但是moveit都是集成好的,我为了实现自己的算法不打算使用moveit,因此我决定参考一个csdn的博主来进行复现,这篇文件是为了记录复现出现的问题。博主:孟德尔的猫链接:2如何给Gazebo中的仿真机械臂添加一个力......
  • socket编程——C++实现基于UDP协议的简单通信(含详解)
    文章后面有代码,可以直接复制在VisualStudio2022中运行(注意:必须是两个项目,客户端服务端各一个,连接在同一网络中,先运行服务端,并且客户端数据发送的目标IP要改为你服务端的IP)目录前言帮助文档一、UDP通信框架1.服务端2.客户端二、服务端实现1.加载库(WSAStartup函数)......
  • VM虚拟机部署code-server服务+tailscale内网穿透,实现随处coding
    1.Linux下安装code-serverReleases·coder/code-server(github.com)https://github.com/coder/code-server/releases先去发布页面查看最新的code-server版本,下载命令示例:wgethttps://github.com/coder/code-server/releases/download/v4.22.1/code-server_4.22.1_amd64.d......
  • 【CNN】ConvMixer探究ViT的Patch Embedding: Patches Are All You Need?
    PatchesAreAllYouNeed?探究PatchEmbedding在ViT上的作用,CNN是否可用该操作提升性能?论文链接:https://openreview.net/pdf?id=TVHS5Y4dNvM代码链接:https://github.com/tmp-iclr/convmixer1、摘要 ViT的性能是由于Transformer架构本身的固有优势,还是至少部分归因于......
  • CAT809JTBI-GT3中文资料规格书PDF数据手册引脚图产品参数特性概述
    产品概述:CAT809是一款µP监督电路,监控数字系统中的电源。CAT809可在基于工业温度范围运行的应用中直接替代MAX809。此器件会产生重置信号,当电源电压降至阈值阈值以下且电源升至该水平140ms之后发出该信号。安森美半导体使用的底层浮动门极技术AE²™可用于提供任......
  • [C++] 小游戏 斗破苍穹2.8.1版本 zty出品
    前言大家好,今天zty带来的是首次增加调试角色的版本,2.8.1版本主要更新了调试角色(感觉没啥用)。先赞后看 养成习惯点赞过100一天更3次正文#include<stdio.h>#include<iostream>#include<ctime>#include<bits/stdc++.h>#include<time.h>//suiji#include<windows.h>/......