没有合适的资源?快使用搜索试试~ 我知道了~
首页yacc与lex的一个例子
资源详情
资源评论
资源推荐

与 编写的规则解析程序示例
Lex 与 yacc 说明:
与 的强大之处就在于他们的解析判断功能。在了解了 与 的语法规则后,
可以通过简单的规则定制生成复杂的词法或语法解析程序。
本程序示例就是根据这样的解析需求,对输入的字符进行解析处理。
示例说明:
本示例参考《 与 》第二版中的计算器示例程序编写
其中,将 解析函数单独封装为独立的处理函数,并将输入从标准输入改为通过参
数的方式传递给 解析器。
运行环境:
小型机
操作系统
编译器
功能说明:
根据数据字符串规则执行指定操作:
例如:

在一个业务应用系统中,我们需要一个流水号
该流水号的规则是“系统日期+系统流水号的后 位”
通过程序编写如下
!
"#$%#$&' !
%#$ !
在规则相对灵活且数量很大的情况下,我们只能根据 () 逐一判断所收到的规
则,并为每一个规则编写一个处理函数,不可忍受,会死人的,该示例的目的就是通过简
单的规则定义解析实现多灵活规则的处理;
采用语法分析与词法分析处理后,以上的规则可以定义为
*+&,-
其中: 为全局变量或用户自行定义列表等数据结构
长度为 . 位
源程序说明:
Lex 词法分析程序:
ruleslexparse.l
/0
12%$,)2
12,)2
13$
13$
$4 !
4$) !56更换 中原有的 $和 $ 程序是为了将输入从标准输入更
改为用户自定义的输入,例如本程序中的参数输入65
78+9!
/:
56在第一部分定义的变量为全局变量,在整个 程序中均可使用 65
//
;<=!
56对输入的字符串进行解析,然后通过 44 传递给 语法解析程序,4 实际就

是在 解析定义文件中定义的/ 联合 65
;9>=&0
644+ !
8>>!
"?@A!
:
56如果是数据就通过标示 "?@A 告诉 ,现在传给你的是一串数字 65
;>B>C=;>B>C9>=60
#,6$+#D !
4#$+$!
$E2;/=;/=F,G#+;/=<2%%H@%%%%@%%4#$>I# !
8>>!
"@!
:
56如果是字符串就通过标示 "@ 告诉 ,现在传给你的是一串字符串 65
<J
0$E2;/=;/=F$K%#D+;/=<2%%H@%%%%@%%;9= !;9=!:
//
),3;L99=!
56此处定义的变量,在上面规则定义部分是不能修改的,他的作用域只在词法解析函数内
使用65
56
K78+9!
65
$4
0
)!
56
3,3 ++9
9 !
$E2$7;/=<2,3 !
65
3+,3;8&&= M+N<9N
0
剩余11页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0