将lex,yacc(flex,bison)与MFC结合起来使用!

Lex与Yacc学习(十)之Yacc库 Yacc库 每个实现都需要有用的例程库,在UNIX系统中,可以通过cc命令行尾端给出-ly标志(或通过其他系统下的等价物)来包含库。 库的内容在不同的实现之间是不同的,但总是包括main()和yyerror() main() yacc的所有版本都带有最小的主程序,该程序对于简短程序和测试有时是很有用的,它非常简单,如下所示: main(argc,argv) { yyparse 阅读详情

近来开始用lex和bison来写一些东东,这两者结合起来使用是相当的方便。用lex,bison做完核心的分析处理之后,想必大家都会把这些嵌入到自己的工程里面,和其他的功能结合起来。但是,往往此时会出现许多的错误。

       lex,bison
默认生成的都是C的源程序,而且二者都有自己的语法规则。 有时会与VC有些冲突,但是,只要修改部分定义之后这些问题都是可以解决的。

1,yyerror()函数,此函数可以直接写在yacc文件的最后。但是在VC里面需要预先声明,也就是说必须把yyerror()的声明部分放在yacc文件的第一部分。
2,isatty()函数,没有用MFC之前,根本就没有注意这个东东,lex,bison生成的console程序跑得很好,但是加了MFC之后这个函数突然跳出来,说是没有定义。结果只好把<io.h>y也include进去了。具体什么原因,本人也不是很清楚。
3
,数据交换的问题。lex,yacc默认的输入是键盘。因此还要为lex创建一个新的buffer。这里可以建立新的文件作为buffer,也可以用字符串yy_switch_to_buffer(yy_scan_string(m_stredit.GetBuffer(m_stredit.GetLength())));结果的输出可以用一个全局的字符串。

这样基本上就可以在MFC中使用lex,bison给我们带来的方便了。

以上是本人的一点点体会,错误和不当之处在所难免,见笑了!

Windows下安装lex(flex)与yacc(bison) 上完第一节编译原理,Mr李要求这周自己探索一下lex和yacc这两个工具。 查了一下lex与yacc是两个在Unix下的分别作词法分析和语法分析的工具,都说很强大。而他俩在linux下又有对应的东西叫flex与bison。虽然硬盘上装了ubuntu但是不怎么用,linux是自带这两个工具的。但是平时还是用windows比较多,当让希望在windows上用这两个东西了。已经有在windows上用c... 阅读详情

相关推荐

c语言编译器,用lex和yacc工具完成词法分析与语法分析并生成语法树

c语言编译器,用lex和yacc工具完成词法分析与语法分析并生成语法树

Yacc使用 收集

索引: 概念 Yacc文件格式 定义部分 规则部分 第三部分 递归的处理 If-Else的冲突 出错处理 Yacc源程序的风格 1.概念yacc使用巴克斯范式(BNF)定义语法,能处理上下文无关文法(context-free)。出现在每个产生式左边(left-hand

小蜜蜂的专栏 1393

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 424

yacc中yyerror的返回值应该为0还是1

yacc中yyerror函数的返回值应该为1。

weixin_42613017的博客 127

保姆级教程:用NILMTK和REDD数据集,5分钟跑通你的第一个负荷分解模型

本文提供了一份详细的NILMTK和REDD数据集负荷分解模型教程,适合零基础用户快速上手。从环境准备、数据获取到模型构建和评估,全程仅需5分钟即可完成。特别适合希望快速入门非侵入式负荷分解(NILM)的开发者,涵盖数据预处理、模型训练及结果可视化等关键步骤。

weixin_30493401的博客 442

用AI从0开始量化交易-制定学习计划安装学习环境

量化小白,利用AI从零开始学量化

weixin_52285994的博客 2113

Yacc介绍与使用

概念 •什么是YACC? yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器). 使用巴克斯范式(BNF)定义语法,能处理上下文无关文法(context-free)。出现在每个产生式左边(left-hand side:lhs)的符号是非终端符号,出现在产生式右边(right-hand side:

yuucyf的专栏 5万+

音频降采样系数

如果需要把8K, 16K, 32K, 48K采样率的音频数据降为4K的音频数据, 最简单的方法根据降频倍数来取点, 但是线性度不好. 另一种线性度好一点的方法是: 取适当个数的点数, 各点乘以各自点的系数, 然后相加取平均值. 降频倍数与系数的关系如下: 2倍:     {0.3, 0.4, 0.3} 4倍:    {0.15, 0.2, 0.3, 0.2, 0.15} 8倍:   {0

joans123的专栏 4646

C语法分析器——采用bison(yacc)实现

C语法分析器——采用bison(yacc)实现 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个基于bison2.1(yacc)和flex(lex)的C语言语法分析器源代码。该分析器能够生成程序的语法树,用于分析单个C语言源文件。它不支持预处理,不解析预处理符号#。 工具包含 bison2.1(yacc) flex(lex) 文件说明 cgrammar...

gitblog_06723的博客 891

不只是对齐:用 MFA 和 Praat 给你的语音数据集快速生成 TextGrid 标注文件

本文详细介绍了如何利用Montreal Forced Aligner(MFA)和Praat工具快速生成TextGrid标注文件,大幅提升语音数据标注效率。通过批量对齐、质量校验和跨语言处理等实战技巧,帮助研究者构建自动化标注流水线,适用于语音合成和语音识别等多种应用场景。

weixin_30675247的博客 378

MiniMax H3本地部署实战:ComfyUI整合包安装与提速插件验证指南

在AIGC工具链快速演进的当下,本地部署内容生成模型成为许多创作者和开发者的关注焦点。本地部署意味着数据不出本机、可按需定制工作流,还能规避云端排队与外部依赖,其核心价值在于为内容生产提供可控、私密且可编程的生成环境。ComfyUI作为模块化节点式AI绘画工具,凭借灵活的工作流编排和API接口能力,成为承载这类模型的热门平台。MiniMax H3作为支持文本、参考图等多种输入的内容生成模型,与ComfyUI结合后,既适合个人进行概念验证,也能用于团队私有化流程搭建。实际落地过程中,中文整合包显著降低了环境配

weixin_29042035的博客 296

C语法分析器采用bison(yacc)实现:项目的核心功能/场景

C语法分析器采用bison(yacc)实现:项目的核心功能/场景 去发现同类优质开源项目:https://gitcode.com/ C语言语法分析器的核心功能是基于bison(yacc)和flex(lex)构建,能够生成程序语法树,分析单个C语言源文件。 项目介绍 在现代软件开发和编译原理的学习中,理解程序的编译过程至关重要。C语法分析器——采用bison(yacc)实现,是一个开源项目,它旨在为...

gitblog_06735的博客 341

杰理JL703N的SDK内部MIDI 音色库功能使用教程

本文介绍了MIDI琴按键解码和MIDI文件解码的实现方法。MIDI琴解码通过audio_dec_midi_ctrl.c文件实现,MIDI文件(mfa格式)解码则使用audio_dec_midi_file.c。使用前需将音色文件存放在SD卡或内置flash中(需确保四字节对齐),并在download.c中配置路径。同时需在板级配置中将FLASH设置为16Mbit以解决编译问题。关键注意事项包括音色文件的文件夹结构对齐要求和MIDI数据流的正确配置。

qq_42014563的博客 390

语法分析实验说明

定义 …%%… 规则 …%%… 子程序 …yacc的输入文件分成三段。“定义”段由一组标记声明和括在“%{”和“%}”之间的C代码组成。B NF语法定义放在“规则”段中,而用户子程序添加在“子程序”段中。构造一个小型的加减法计算器可以最好的说明这个意思。我们要以检验lex和yacc之间的联系开始我们的学习。下面是yacc输入文件的定义段:上面的定义声明了一个 INTEGER标记。lex文件要包含这个头文件,并且使用其中对标记值的定义。为了获得标记,yacc会调用yylex。

北冥有渔的博客 1016

从 SEGW 到 SADL 的那根线,彻底理解 OData Data Source Mapping

本文摘要(150字): 在SAP Gateway的SADL型OData服务开发中,"Map to Data Source"是关键配置环节。与传统RFC映射不同,SADL映射不是针对单个CRUDQ操作,而是建立OData模型与SADL业务实体间的完整语义对应关系。通过属性映射和关联映射,系统能自动处理数据获取和导航请求。映射编辑器支持三种模式:属性映射处理字段对应,关联映射处理模型间关系,动作映射处理业务操作。映射的本质是建立语义翻译表,决定了后续OData请求如何转化为后端业务实体访问,而非简单的字段重命名

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 61

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)

前言 1.文章诞生的契机 在计算机学习中,我们有时可能会想到自制一门属于自己的编程语言,此时选择lex与yacc来生成词法分析器与语法分析器是非常不错的选择。然而,这两个工具虽然用起来简单,但对于新手来说,入门还有着些许的难度。 入门的难度通常不是因为工具的复杂,而是因为教程有些难懂。在大多数教程作者眼里,想要自制一个语言的必然不会是初学者,毕竟新手们还在被C和JAVA等语言搞得晕头转向。这导致大多数lex与yacc教程都是面向进阶选手,内容“点到为止”,并心照不宣地省略了一些“常识”。导致内容在我等这般新

weixin_44007632的博客 7万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

yacc lex 使用中错误信息解决解决方案

 ex3.y: In function ‘yyerror’:ex3.y:32: warning: incompatible implicit declaration of built-in function ‘printf’这一条是因为.y缺少头文件。在.y文件中需要在%{....%}之中写入#include 等头文件。如果只有printf那就只用这个头文件就行了。  ex

帐前卒 专栏 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

yacc用法(未完成)

用 Yacc 编写语法如同 Lex 一样, 一个 Yacc 程序也用双百分号分为三段。 它们是:声明、语法规则和 C 代码。 我们将解析一个格式为 姓名 = 年龄 的文件作为例子,来说明语法规则。 我们假设文件有多个姓名和年龄,它们以空格分隔。 在看 Yacc 程序的每一段时,我们将为我们的例子编写一个语法文件。C 与 Yacc 的声明C 声明可能会定义动作中使用的 类型 和 变量,以及 宏。 还可

m_bkj的博客 881

编译原理—Lex和Bison实现计算器

calc.lex文件 %{ /* * 一个简单计算器的Lex词法文件 */ #include #include void yyerror(char*); /* #include "calc.tab.h" */ %} %% /* a-z为变量 */ [a-z] { yylval =

LY_624的专栏 4205

用Lex和Bison实现简单的计算器

运用Lex和Bison实现一个简单的命令行计算器,支持基本的四则运算(加、减、乘、除),并允许使用括号来改变运算优先级。用户可以在命令行输入一个算术表达式,程序会计算该表达式的值并输出结果。打开终端,输入以下命令来安装 Bison(通常同时也会安装 Flex,它是 Lex 的 GNU 版本)

2302_77871725的博客 365

[编译原理]lex和bison实现逻辑表达式求值以及短路计算次数统计

内容:逻辑表达式的求值工具 输入一个包含数值的逻辑表达式,输出计算其真值,和因短路操作而跳过的数值比较的次数。输出格式为Output: [true or false], [次数]。注意,逻辑表达式的计算符合短路算法。其中,!计入逻辑运算次数,而 == 或 != 只用于非布尔型的数值比较。例如: 输入:3 == 2 输出:Output: false, 0 输入:3 > 2 输出:Output: true, 0 输入:3 > 2 && 10 > 1 输出:O...

Joseph115的博客 1807

YACC&Flex Windows使用开发

    FLex(Fast lexical analyzer generator)是词法分析器的生成器,提供对输入的文本进行分析,匹配指定的词法模式。Lex在使用上很不方便的一点是它是首先在Unix系统上出现的工具,后来成为了GNU的一员,虽然移植到Windows平台,但是使用起来有很多需要注意的地方。    在windows上的使用我使用过Parser Generation、GNUWin32移植

销魂在何方的专栏 1198

Lex和Yacc入门 [翻译 2009-10-7 3:45:06]

http://coanor.blog.hexun.com/38241166_d.html 1. 简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一个Lex,Bison则是GNU版本的YACC.在此我们将统一称呼这些程序为Lex和YACC.新版本的程序是向上

djinglan的专栏 3077

lex 和 yacc 学习笔记1

最近想自己写个轻量级的sql的解析器,所以开始学习lex和yacc,并记录其中碰到的主要问题。 首先需要解决的lex和yacc的基本使用的问题,跑通一个最简单的例子。 网上有很多lex和yacc的入门例子,但基本都一样,看完后还是不知道在程序里怎么调用它们来做解析。 主要不清楚的问题有:       a. 如何在lex,yacc和自己的程序间传递数据       b. 如何在自己的程序里调用le

gao1738的专栏 948

词法分析器的生成器——lex/flex

文章目录前言编译器概述词法分析简介flex初步体验flex进阶yylex()模式匹配flex常用全局变量和宏条件模式 前言 关于lex和yacc的介绍看文章:编译原理之lex,yacc学习 关于flex和lex其实是类似的,lex不再赘述。 此文章主要介绍flex。thrift框架的compiler采用flex词法分析生成器来生成词法分析代码。flex通过编译thriftl.ll生成thriftl.cc文件,thriftl.cc即是该compiler的词法分析代码。 对于flex只弄懂其原理与用法,不追究

weixin_44705391的博客 6668
上一篇: 为flex提供多输入缓冲!Multiple input buffers
下一篇: 下载bison和flex的好地方
chenbuaa
博客等级 码龄25年 6粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值