Lex和Yacc使用学习笔记(一)

LEX词法分析中常见的YY___的用法 这个函数。 阅读详情
 

概述

使用Lex和Yacc构造编译器过程如下图所示:

 

Yacc 读入bas.y 中的语法描述而后生成一个剖析器,即y.tab.c 中的函数 yyparse。b as.y 中包含的是一系列的标记声明。Lex 读入bas.l 中的正则表达式的说明,包含文件 y.tab.h,然后生成词汇解释器,即文件lex.yy.c 中的函数yylex。

最终,这个解释器和剖析器被连接到一起,而组成一个可执行程序,bas.exe。我们从main 函数中调用yyparse 来运行这个编译器。函数yyparse 自动调用yylex 以便获取每一个标志。

Lex

       在第一阶段,编译器读入源代码然后把字符串转换成对应的标记。使用正则表达式,我们可以为Lex设计特定的表达式以便从输入代码中扫描和匹配字符串。在Lex上每一个字符串对应一个动作。通常一个动作返回一个代表被匹配的字符串的标记给后面的剖析器使用。

每一个正则表达式代表一个有限状态自动机 (FSA)。 我们可以用状态和状态之间的转换来代表一个FSA 。其中包括一个开始状态以及一个或多个结束状态或接受状态。

lex 把正则表达式翻译成模拟FSA 的一个计算机程序。通过搜索计算机生成的状态表,很容易使用下一个输入字符和当前状态来判定下一个状态。

Lex使用后缀名l的文件,文件结构如下:

... 定义 ...

%%

... 规则 ...

%%

... 子程序 ...

定义段由替代式,C代码,和开始状态构成。

定义段中的C代码被简单地原样复制到生成的C文件的顶部,而且必须用%{和%}括起来。

替代式简化了正则表达式规则。例如,可以按如下方式定义数字和字母:

digit [0-9]

letter [A-Za-z]

替代式中定义的在规则段中使用时需要添加花括号{},如{letter}。

规则段指定正则表达式已经对配置的这个表达式所做的处理。

子程序端中定义代码会直接拷贝到目标源文件中去。

 

Lex中使用的模式匹配的正则表达式的符号表

表意字符

匹配字符

.

除换行外的所有字符

/n

换行

*

0次或无限次重复前面的表达式

+

1次或更多次重复前面的表达式

?

0次或1次出现前面的表达式

^

行的开始

$

行的结尾

a|b

a或者b

(ab)+

1次或玩多次重复ab

"a+b"

字符串a+b本身(C中的特殊字符仍然有效)

[]

字符类

 

正则表达式举例:

表达式

匹配字符

abc

abc

abc*

ab abc abcc abccc ...

abc+

abc abcc abccc ...

a(bc)+

abc abcbc abcbcbc ...

a(bc)?

a abc

[abc]

a,b,c中的一个

[a-z]

从a到z中的任意字符

[a/-z]

a,-,z中的一个

[-az]

-,a,z中的一个

[AZaz09]+

一个或更多个字母或数字

[ /t/n]+

空白区

[^ab]

除a,b 外的任意字符

[a^b]

a, ^, b 中的一个

[a|b]

a, |, b 中的一个

a|b

a, b 中的一个

方括号中只保留两个操作,连字号(“-”)和抑扬号(“ ^” ) 。当把连字号用于两个字符中间时,表示字符的范围。当把抑扬号用在开始位置时,表示对后面的表达式取反。Lex中如果两个范式匹配相同的字符串,就会使用匹配长度最长的范式。如果两者匹配的长度相同,就会选用第一个列出的范式。

 

在lex中预定义的变量及其功能如下表所示:

名称

功能

int yylex(void)

调用扫描器,返回标记

char *yytext

指针,指向所匹配的字符串

yyleng

所匹配的字符串的长度

yylval

与标记相对应的值

int yywrap(void)

约束,如果返回1 表示扫描完成后程序就结束了,否则返回 0

FILE *yyout

输出文件

FILE *yyin

输入文件

INITIAL

初始化开始环境

BEGIN

按条件转换开始环境

ECHO

输出所匹配的字符串

其中ECHO宏是这么定义的:

#define ECHO fwrite(yytext, yyleng, 1, yyout)

变量yyout是输出文件,默认状态下是stdout。当lex读完输入文件之后就会调用函数yywrap。如果返回1 表示程序的工作已经完成了,否则返回0。

 

下面是一个扫描器,用于计算一个文件中的字符数,单词数和行数(类似Unix 中的wc 程序):

%{

int nchar, nword, nline;

%}

%%

/n { nline++; nchar++; }

[^ /t/n]+ { nword++, nchar += yyleng; }

. { nchar++; }

%%

int main(void) {

yylex();

printf("%d/t%d/t%d/n", nchar, nword, nline);

return 0;

}

使用Parser Generator2.07来完成生成工作,使用向导新建只有Alex的工程,注意Target Language的选择,上述例子使用了的是C;[Project]->[Rebuild All]就生成了此法分析的C源代码wc.c和wc.h文件;新建VC++工程,按照下述步骤配置环境

1.目录设置

在VC++中执行以下步骤,每个步骤只执行一次。

(1) 选择Tools菜单中的Options命令,在屏幕上即会出现Options对话框。

(2) 选择Directories选项卡。

(3) 在Show Directories for下拉列表框中选择Include Files。

(4) 在Directories框中,点击最后的空目录,并填入Parser Generator的include子目录的路径。

(5) 在Show Directories for下拉列表框中选择Library Files。

(6) 在Directories框中,点击最后的空目录,并填入Parser Generator的lib/msdev子目录的路径。

(7) 在Show Directories for下拉列表框中选择Source Files。

(8) 在Directories框中,点击最后的空目录,并填入Parser Generator的Source子目录的路径。

(9) 点击OK按钮,Options对话框将接受设置并关闭。

VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件。

2.项目设置

对于每个VC++项目,都需在VC++中执行以下步骤:

(1) 选择Project菜单中的Settings命令,在屏幕上即会出现Project Settings对话框。

(2) 在Settings for下拉列表框中选择Win32 Debug。

(3) 选择C/C++标签。

(4) 在Category下拉列表框中选择General。

(5) 在Preprocessor Definitions框中,在当前文本的最后,输入YYDEBUG。

(6) 选择Link标签。

(7) 在Category下拉列表框中选择General。

(8) 在Object/Library Modules框中,在当前文本的后面,输入yld.lib ylmtd.lib ylmtrd.lib ylmtrid.lib。

(9) 在Settings for下拉列表框中选择Win32 Release。

(10) 重复第8步的工作,但是*.lib文件选择Release版的,及不带d的。

(11) 点击OK按钮,Project Settings对话框将接受设置并关闭。

       配置完后编译,运行就可。
Lex和Yacc从入门到精通(4)-能够使用C++的Lex和Yacc框架 能够使用C++的Lex和Yacc框架 本文版权归熊春雷所有 ,我的邮箱:pandaxcl@163.com>,欢迎大家和我讨论计算机方面 的问题,在我的博客上 面还写了很多其他的文档,有空来看看哦。如果转载,请保留此版权信息,并注 明出处。谢谢:) 摘要 写这一章的目的就是为了能够提供一个能够使用C++特色的Lex和Yacc框架,这个 阅读详情

相关推荐

Lex和Yacc使用教程(九).Windows下使用Lex和Yacc

Lex和Yacc应用方法(九).Windows下使用Lex和Yacc草木瓜  20070904一、序    不想Lex和Yacc系列的最后一篇文章竟如此“难产”,已时隔三个月之久。不由慨叹自由可支配时间是如此之少,如此岂不谓新时代的“奴隶”~    罢罢罢,闲话少叙,回归正题,本文主要介绍在Windows下如何去使用Lex和Yacc,以作为本系列文章的终结。    二、方法介绍  

草木瓜 2万+

lex生成lex.yy.c代码流程解析

词法分析器 lex.yy.c流程分析

DavidWu88的专栏 5863

Lex和Yacc应用方法(二).再识Lex与Yacc

Lex和Yacc应用方法(二).再识Lex与Yacc草木瓜  20070314早在二十世记七十年代之前,编写编译器一直是一个非常费时的工作。但到了1975这一年这一切却发生了重大转变,首先Stephen C. Johnson Lesk在贝尔实验室完成了Yacc开发,为了配合yacc更好的协作, Mike Lesk和Eric Schmidt又完成了lex。从而Lex和yacc成为计算机编译领

草木瓜 1万+

lex编译dos命令_lex.yy.c如何运行

? FLEX 1.L 3、运行 FLEX 后,产生“LEXYY.C”程序 4 、用 VC 打开“LEXYY.C” 程序,编译后产生“LEXYY.EXE”程序。 5、进入 DOS 环境“LEXYY.EXE”......七、结果分析 程序运行命令: 其中 lex.l 即为编写的 Lex 源代码;lex.yy.x 是上一步 flex 对 lex.l 源代码进行处理,生成的文件;用 gcc 对 lex.y...

weixin_39700394的博客 1815

【PLY】Lex和Yacc简单示例

PLY是流行的编译器构造工具lex和yacc的纯python实现。 PLY官方文档:http://www.dabeaz.com/ply/ PLY文档翻译:https://qyliang.blog.youkuaiyun.com/article/details/97686897 PLY由两个单独的模块组成lex.py和 yacc . py 。都可以在名为ply的Python包中找到。 lex.py模块用于将输入的...

土豆洋芋山药蛋的博客 3062

UM2 3D 打印机 DIY 实践 (2) 电路篇

涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC .

afeiqiang的专栏 3601

编译原理——编写LEX文件:一个能识别所有运算式中包含的符号

编写LEX文件:一个能识别所有运算式中包含的符号:数字(0-9)+,变量(a-zA-Z)+,运算符:“+,-,*,/,(,)”。 如输入(a+10)*b,输出: OPERATER:( WORD:a OPERATER:+ NUMBER:10 OPERATER:) OPERATER:* WORD:b

m0_59052131的博客 5268

FFmpeg实战:SEI自定义数据在RTMP推流中的高效嵌入

本文深入探讨了如何利用FFmpeg在RTMP推流中高效嵌入SEI自定义数据。通过将SEI比作与视频帧同步的“小纸条”,文章详细解析了H.264码流中SEI的结构与位置,并提供了命令行与API编程两种实战方法,帮助开发者实现直播答题、AI元数据回传等场景下的帧级精准数据同步。

weixin_29304021的博客 325

Lex使用指南

Lex使用指南

火雨(Nick) 2万+

基于DE2-115红外解码实验

基于DE2-115红外解码实验   一、   功能描述 在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型, 这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。只有知道编码方式,我...

乘风的博客 2515

Oracle19c-集群节点重新添加

Oracle RAC集群在极端情况下,如硬件、主机,集群软件损坏,导致集群节点永久无法使用,需要对集群节点进行修复,删除节点集群信息并重新加入集群,以恢复集群原有的架构。 本文主要讲述一套两节点的Oracle19c RAC集群,节点一orcl01由于主机异常无法正常启动,在对主机进行重装之后,需要将orcl01节点重新加入集群的操作步骤。环境信息: 操作系统:Linux 7 RAC集群:19C 主机节点:orcl0...

sinat_36757755的博客 2352

Lex和Yacc应用方法(一).初识Lex

 Lex和Yacc应用方法(一).初识Lex草木瓜  20070301Lex(Lexical Analyzar 词法分析生成器),Yacc(Yet Another Compiler Compiler编译器代码生成器)是Unix下十分重要的词法分析,语法分析的工具。经常用于语言分析,公式编译等广泛领域。遗憾的是网上中文资料介绍不是过于简单,就是跳跃太大,入门参考意义并不大。本文通过循序渐进的

草木瓜 5万+

embedding计算过程

文章目录embedding计算过程(错了跟我讲,我会改)参考示例个人理解过程图示总结(基于pytorch) embedding计算过程(错了跟我讲,我会改) 参考示例 https://www.jianshu.com/p/63e7acc5e890 个人理解过程图示 总结(基于pytorch) 总的来说,就是将独热向量的长度(对应嵌入层的num_embeddings)转变为嵌入层的emdedding_size(而独热向量的维数就是你的数据中一共产生了多少个不一样的词,至少是这么多)。 数据的变化,将二维

纸上得来终觉浅,绝知此事要躬行! 1632

编译原理——Lex和yacc的安装

Lex和yacc的安装 Linux用户 Lex和Yacc可以直接从终端安装,命令: apt install flex bison 部分系统可能还需要手动安装 gcc 和 make 等工具,请自行测试。 安装完成后,在终端输入以下命令,若可以正确显示出版本号,则安装成功。 gcc --version lex --version yacc --version 如图所示:(图片来源网络)...

budding0828 1万+

k8s部署 普罗米修斯(Prometheus)监控

Prometheus是一个开源的服务监控系统和时序数据库其提供了通用的数据模型和快捷数据采集、存储和查询接口它的核心组件Prometheus服务器定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉 取数据新拉取到啊的 数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

D2961953033的博客 3855

HEC-HMS水文建模从入门到精通:手把手教你安装与配置(附常见问题解决)

本文详细指导HEC-HMS水文建模软件的安装与配置,重点解析了基于InstallShield Wizard的安装流程,并提供了针对常见错误代码(如-6003)的解决方案。旨在帮助水文、水利领域从业者快速搭建稳定的建模环境,为后续流域模拟与洪水预报奠定基础。

weixin_29213827的博客 496

lex与yacc程序学习(4)——lex和yacc的使用

一个程序通常在每次返回一个标记时都要调用yylex()函数。只有在文件结束或者出现错误标记时才会终止。 一个由yacc生成的分析器调用yylex()函数来获得标记。yylex()可以由Lex来生成或完全由自己来编写。对于由Lex生成的lexer来说,要和yacc结合使用,每当Lex中匹配一个模式时都必须返回一个标记。因此Lex中匹配模式时的动作一般格式为: {pattern} { /* do smthg*/ return TOKEN_NAME; } 于是 Yacc 就会获得返回的标记。当 Yacc

wang_yr的博客 1239

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 180

能够使用C++的Lex和Yacc框架

能够使用C++的Lex和Yacc框架<br />写这一章的目的就是为了能够提供一个能够使用C++特色的Lex和Yacc框架,这个框架同前一章的目的一样,也是仅仅为了能够提供一个什么也不作的框架程序,当时有点不同的就是:这个新的框架使用了C++语法,能够使用所有的C++特色,包括STL的强劲算法和容器,还有各式各样的C++库。采用C++的目的就是为了能够快速的编码来完成自己需要完成的任务。<br />在编码词法分析和语法分析程序的时候经常会编写一些链表和容器,实际上这些链表和容器在C++语言函数库里面都已经有

Skai_优快云的专栏 2356

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习工具包 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 与 Lex 快速入门

简介: Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上, 如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。本文详细的讨论了编写自己的语言和编译器所 用到的这两种工具,包括常规表达式、声明、匹配模式、变量、Yacc 语 法和解析器代码。最后,本文解释了怎样把 Lex 和 Yacc 结合起来。

红孩儿编程大师 4590

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

yacc lex c 注释_Lex与YACC详解

原文:https://www.cnblogs.com/hdk1993/p/4922866.html注:1)修正了原文中有问题的代码;2)补充了YY_INPUT等内容。一、简介只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一个Lex,Bison则是GNU版本的Y...

weixin_39632397的博客 1560

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于Lex 和 Yacc 的 C 语言编译器

最近由于项目需要,看了点关于编译原理和编译器等方面的资料,特别是词法分析和语法分析部分,现做一下小结。 一、编译器及其工作流程 编 译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程...

JennyComputer2014的博客 1430

Lex和Yacc入门

原文地址: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.新版本的程序是

雜貨鋪 2200

Lex+YACC or Flex+Bison

1.简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一个Lex,Bison则是GNU版本的YACC. 在此我们将统一称呼这些程序为Lex和YACC.新版本的程序是向上兼容的(译注:即兼容老版本),所以你可以用Flex和Bis...

zzhongcy的专栏 3658

LEX和YACC简介

Lex工具 -------     Lex工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序,由该程序识别出输入文本中的各个单词。 1、lex程序的结构 -定义部分 -规则部分 -用户子程序部分 其中规则部分是必须的,定义和用户子程序部分是任选的。 (1) 定义部分      定义部分起始于"%{"符号,终止于"%}"符号,其间可以是包括include语句、声明语句在内的C语句。 %{ #include "stdio.h" #include "y.tab.h" extern in

xiaoxiaofengqi的专栏 5471

Lex和Yacc从入门到精通(3)--一个极其简单的lex和yacc程序

一个极其简单的lex和yacc程序 本文版权归熊春雷所有 ,我的邮箱:pandaxcl@163.com>,欢迎大家和我讨论计算机方面 的问题,在我的博客上 面还写了很多其他的文档,有空来看看哦。如果转载,请保留此版权信息,并注 明出处。谢谢:) 摘要 在本章中,将会首先给出一个最基本的lex和yacc联合使用的框架,这个基本框架

2万+
上一篇: 设计模式轻松讲解
下一篇: Lex和Yacc使用学习笔记(二)
flying2
博客等级 码龄25年 4粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值