首页 > 编程知识 正文

flexpro软件使用教程(弹性盒子布局flex菜鸟教程)

时间:2023-05-05 01:45:57 阅读:69267 作者:3738

目录1. lex/yacc概述1.1. lex/yacc与flex/bison的关系1.2. lex/yacc的优势1.3 .程序示例下载地址1.4 .学习资料2. flex语法(分为三部分)2.1.3部分按%%划分2.2 .第一部分2.3 .第二部分:单词匹配后进行某些动作(核心部分句法分析ex是将lex代码编译成词法分析器的编译理论基础2.3.3 .单词匹配)2.3.4.匹配单词后的动作2.3.5 .内置lex

lex/yacc是思想,flex/bison是其gnu实现

lex/yacc的好处可以轻松构建c/c编译器

程序示例下载地址FTP ://FTP.iecc.com/pub/file/flex bison.zip

学习资料Bison 3.0.4: Top

flex语法(分为三个部分)的三个部分用%%分割第一部分的lex代码

%%

第二部分lex代码

%%

第三部分lex代码

第1部分:声明和选项设置(直接复制到生成的lex.yy.c ) ) ) )。

变量是复制到操作中可用的lex.yy.c的c语言变量

%}

第二部分:单词匹配后进行某些动作(核心部分语法分析器,yylex );在lex.yy.c中生成函数)语法正则表达式1动作1

正则表达式2操作2

正则表达式3操作3

要按照正则表达式语法编写正则表达式,lex作为词法分析代码编译的动作是c语言语句,动作c语言语句直接复制到lex.yy.c的是两者加起来的是yylex ) )函数,yylex ) )函数是yacc

单词匹配(正则表达式)基本用法

最长匹配原则:词法分析器匹配输入时,如果匹配尽可能多的字符串的两种模式一致,则匹配程序中更早出现的模式

如果在两个字符之间使用连字符,则表示字符的范围。 抑扬号用于开始位置时,意味着将后面的公式颠倒。 如果两个正则表达式匹配同一字符串,则使用匹配长度最长的正则表达式。 如果两者一致的长度相同,则选择第一个列举的范例。

单词匹配示例

完整的Lex/Yacc示例(c可用)- huyansoft专栏-博客频道- CSDN.NET

n与非字符匹配

水平。

n匹配字符

n

忽略空白字符

[t ] *忽略空白*;

wc中定义的无空白字符

[^ tnrfv]

匹配的单词

非数字由大小写字母、下划线组成

nondigit([_a-za-z] )。

一致的数字

一位数字,可以是0到9

数字([0-9] ) )。

匹配整数

整数由1至多位数字组成

integer (数字) )

匹配的标识符

非数字由大小写字母、下划线组成

nondigit([_a-za-z] )一位数字,可以是0到9

数字([0-9] ) )。

标识符,以非数字开头,后跟0至多个数字或非数字

identifier(nondigit ) non digit (|digit ) * )

要在语法规则中使用这些变量,必须注意带括号的{indentifier}

匹配连续的空白字符串

一个或一段连续的空白符

blank_chars([frtv] )

匹配单词后的动作语法

{1个或多个c语言句子}

动作中使用的变量

使用在lex代码的第一个部分声明中定义的变量lex的默认定义的内部变量

变量名yytext指向此次匹配的输入文本的角色y.tab.h使用yacc中定义的变量

打印一致的数据

如果不写动作,默认动作为打印。 所以宏观{ECHO; }不用写。

{ECHO; }

ECHO是一个c语言宏

(defineechofwrite(yytext,yyleng,1,yyout ) ) )。

向语法分析器传递符号信息

传递字符串值-使用函数strdup(yytext )

passingvalues(yylval ) otherthanstringfromflextobison

lex内置变量名称功能char *yytext指针。 与匹配字符串yyleng匹配的字符串的长度yylval标记对应的值FILE *yyout输出文件FILE *yyin输入文件INITIAL初始化开始环境BEGIN在条件转换开始环境ECHO中输出一致字符串的lex内置函数名称功能intylex(void )调用扫描仪,返回标签intyywrap (void )约束,返回1则扫描否则,如果每次返回0分析器时调用yylex ) )的分析器需要以下令牌,则它将再次调用yylex (),词法分析器将协同工作。 每次返回时,yylex ) )都会记录读取的文件的位置,分析器再次调用yylex ) )时,会继续从该位置开始读取。

第3部分:直接复制到生成的lex.yy.c的int main ()

{

yylex (;

}

flex程序编译flex代码. l//生成lex.yy.c

cc lex.yy.c -lfl //链接flex库文件

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。