OpenCASCADE Expression Interpreter by Flex & Bison

Similar documents
Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

绘制OpenCascade中的曲线

C 1

93年各縣國中教師甄試最新考情.doc

大侠素材铺

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

C/C++ - 文件IO

第一章

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

桂医大研〔2015〕10号

2



02

CC213

Evaluate Math Expression

mvc

2/80 2

UDC The Policy Risk and Prevention in Chinese Securities Market

三維空間之機械手臂虛擬實境模擬

Microsoft Word doc

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

379 市 分 别 建 立 执 业 药 师 协 会 这 一 目 标 还 有 相 当 一 段 路 要 走 门 户 网 站 作 为 展 示 协 会 建 设 风 采 的 窗 口, 是 搭 建 执 业 药 师 与 群 众 联 系 的 桥 梁 为 群 众 了 解 并 监 督 执 业 药 师 工 作 为 执 业

<4D F736F F D C2E0BEC7A6D2A4ADB14DB0EAA4E52DB8D5C344A8F72E646F63>

C/C++ - 字符输入输出和字符确认

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d


第7章-并行计算.ppt

营 销 策 划 岗 部 门 招 聘 职 位 招 聘 人 数 岗 位 职 责 基 本 要 求 岗 位 任 职 要 求 6 参 与 项 目 产 品 研 究 客 户 需 求 研 究 竞 争 环 境 研 究 价 格 研 究 等 项 目 市 场 研 究 ; 7 公 司 经 纪 业 务 的 品 牌 管 理, 对

Landscape Theory & Study 17

C++ 程式設計

提纲 1 2 OS Examples for 3

CC213


1

ebook8-30

第3章.doc

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

PowerPoint 演示文稿

\\Lhh\07-02\黑白\内页黑白1-16.p

工程施工招标

Microsoft Word doc

untitled


Eclipse C C++, or

C6_ppt.PDF

C/C++ - 函数

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-


声 明 本 人 郑 重 声 明 : 此 处 所 提 交 的 硕 士 学 位 论 文 基 于 等 级 工 鉴 定 的 远 程 考 试 系 统 客 户 端 开 发 与 实 现, 是 本 人 在 中 国 科 学 技 术 大 学 攻 读 硕 士 学 位 期 间, 在 导 师 指 导 下 进 行 的 研 究


untitled


NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

(Microsoft Word - \261M\256\327\272\353\302\262\263\370\247iEnd.doc)

214 年 第 3 期 郑 丹 青 等 : 高 职 学 生 个 性 特 征 及 职 业 能 力 调 查 与 分 析 61 一 问 题 的 提 出 随 着 高 等 教 育 大 众 化, 高 职 院 校 的 学 生 来 源 出 现 多 样 化, 学 生 的 基 本 素 质 和 职 业 能 力 参 差 不

WWW PHP

2013国际营销科学与信息技术大会(MSIT2013)

新 竹 縣 教 育 研 究 集 刊 第 十 一 期 民 100 年 12 月 Guo,Na-Yi Teacher of Chu-Bei Elementary School Abstract The purpose of this action research was to examine the

标题

~ ~ ~ ~

國立中山大學學位論文典藏.pdf

FY.DOC

C/C++语言 - 运算符、表达式和语句

标题

untitled


中国科技论文在线中文稿件模板

C/C++程序设计 - 字符串与格式化输入/输出

《C语言程序设计》教材习题参考答案

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

目 录(目录名)

C/C++语言 - C/C++数据

吴 郁 玲 等 : 农 户 对 宅 基 地 使 用 权 确 权 效 应 的 认 知 研 究 以 武 汉 市 为 例 29 the paper tried to provide a basis to improve the confirmation policy efficiency and to f

Knowledge and its Place in Nature by Hilary Kornblith

2011第1期第二部分

在 培 养 职 前 卓 越 化 学 教 师 的 院 校, 会 编 一 本 过 去 称 作 化 学 教 学 论 实 验, 现 在 拟 为 卓 越 化 学 教 师 教 育 实 验 教 学 研 究 的 教 材 各 院 校 对 这 门 课 程 所 给 的 学 时 不 太 一 样, 但 都 是 围 绕 实 验

, 480D,,,?,,,,,,,,,,,,, :,,,,,,, :,,,,,, ( ),,,,,,,,,, :!( ),,, (A2 + ),, (U),,,,,,,,,,,,,,,, (donor),, 1956, (8) : 38.. ( ) [ Z]. :, (). [ M ].

0SQL SQL SQL SQL SQL 3 SQL DBMS Oracle DBMS DBMS DBMS DBMS RDBMS R DBMS 2 DBMS RDBMS R SQL SQL SQL SQL SELECT au_fname,au_ lname FROM authors ORDER BY


影響新產品開發成效之造型要素探討

,,,, 1980,,,,, 1980, (, J,1980) (,,1980) (,,1982) (,1980) (,1982) (, 1983) (,1983) (, 1983) (,1983) (,1985) (, C,1985), ,,, : (1980 ),,,,,, (

案例正文:(幼圆、小三、加粗)(全文段前与段后0

CC213

Microsoft PowerPoint - TTCN-Introduction-v5.ppt

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

The Belief in Monk Ji-Gong and His Temples in South Taiwan Chang Chung-Liang Lecturer, General Education Center, Tainan Woman s College of Arts Techno

南華大學數位論文

Microsoft Word doc

如 语 言 研 究 型 数 据 库 那 样 成 熟, 但 可 为 构 建 华 文 教 材 数 据 库 提 供 借 鉴 此 类 数 据 库 中 有 代 表 性 的 有 北 京 语 言 大 学 的 对 外 汉 语 教 材 检 索 数 据 库, 中 央 民 族 大 学 的 国 际 汉 语 教 学 国 别

Microsoft PowerPoint - OPVB1基本VB.ppt

,,,,,,,,,,,,,,,,,,,,, ( Interational Chinese Language Education),, ;, ;, ;,,,,,,,, 2. 1,,,,, (MTCSOL),,,,,, 400

Microsoft Word 期交所簡章 _110805_

中国科技论文在线中文稿件模板


Microsoft Word 谢雯雯.doc

~ ~ ~

目 录(目录名)

第 猿 猿 卷 第 愿 期 20 员 猿 年 愿 月 张 媛 媛 等 院 肥 胖 与 雌 激 素 的 相 互 关 系 及 其 对 子 宫 的 作 用 研 究 原 员 远 员 原 素 等 多 种 原 因 有 关 袁 对 于 女 性 而 言 绝 经 后 雌 激 素 水 平 下 降 是 更 年 期 肥 胖

Transcription:

OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide data structure of any expression, relation or function used in mathematics. Flex and Bison are tools for building programs that handle structured input. They were originally tools for building compilers, but they have proven to be useful in many other areas. The Expression Interpreter in OpenCASCADE is made by Flex and Bison. So let s know something about Flex and Bison. Key Words. OpenCASCADE, Expression Interpreter, Flex, Bison 1.Introduction OpenCASCADE 的 TKMath 中提供了数学表达式求解的包 Expr 和 ExprIntrp, 用来对数学表达式或函数进行解析计算 所谓的数学表达式如 :sin(10)+20*6-6/3 等 以前在 数据结构 的书上看到用栈的方式来对简单表达式求值, 感觉已经很不错了 但是如果表达式中包含三角函数 对数 指数等, 程序就要复杂了 如何简单 优雅地去解决这个问题, 当时也是很茫然 工作中遇到前辈自己写了一个用于定义几何的语言, 还可以计算表达式 虽然没有看到源码, 对其已是崇拜不已 后来接触了脚本语言, 像 Tcl/Tk,Python 之类, 发现原来利用这些开源库, 也是可以实现一个简单 稳定的自定义开发语言 因为这类脚本不仅可以计算表达式, 还可以计算带参数的表达式, 如 : set x 3 set y 4 set z [expr sqrt($x*$x+$y*$y)] 只要你在 Unix 环境中写过程序, 你必定会邂逅神秘的 Lex&YACC, 就如 GUN/Linux 用户所熟知的 Flex&Bison, 这里的 Flex 就是由 Vern Paxon 实现的一个 Lex,Bison 则是 GNU 版本的 YACC 学习过 编译原理 的同学们对这两个神器应该不会陌生 使用这两个工具, 不仅可以实现一个表达式解析计算器, 还可以用来解析 SQL 语法, 如 PostgreSQL 中就是使用他们实现 SQL 语法解析 甚至还可以实现一个编译器 因为是 Unix 上的工具, 在 Windows 上需要使用 winflexbison, 可以从 sourceforge 上下载 : https://sourceforge.net/projects/winflexbison/ 本文介绍如何使用 Flex 来理解 OpenCASCADE 中 ExprInterp 的实现, 开阔视野 OpenCASCADE 中 ExprInterp 的用法见 :Evaluate Math Expression http://www.cppblog.com/eryar/archive/2013/10/09/203625.html

2.Flex Example FLEX 是一个自动化工具, 可以按照定义好的规则自动生成一个 C 函数 yylex(), 也成为扫描器 (Scanner) 这个 C 函数把文本串作为输入, 按照定义好的规则分析文本串中的字符, 找到符合规则的一些字符序列后, 就执行在规则中定义好的动作 (Action) 例如在规则中可以这样定义 : 如果遇到一个换行字符 \n, 那么就把行计数器的值加一 Flex 文件就是一个文本文件, 内容包括定义好的一系列词法规则 文件的命名习惯上以小写字母 l(l) 来作为文件后缀 如果为了清晰, 也可以用.flx 或者.flex 作为文件的后缀名 Flex 文件完成后, 就执行下列命令 : $ flex example.flex 这个命令执行后将生成一个 C 文件, 默认文件名为 lex.yy.c 这个 C 文件主要内容就是函数 yylex() 的定义 如果要直接将这个文件编译成为一个可执行程序, 还有一些要注意的地方 如果在 Flex 文件中没有提供 main() 函数的定义, 那么这个 C 文件中不会有 main() 函数 此时单独编译这个 C 文件的时候, 一定要加上 -lfl 的连接库参数 ; 若提供了 main() 函数, 就不必要提供这个连接库参数了 连接库 libfl 提供了一个缺省的 main 函数 缺省的 main() 函数中只是简单地调用 yyflex() 函数, 而自己提供的 main() 函数则可以根据需要加入许多其他的处理代码 词法规范定义文件给出了单词构成规则 词法文件在习惯上用字母 l( 即 L 的小写 ) 来作为后缀 Flex 文件由三个部分组成 或者说三个段 三个段之间用两个 分隔 定义段 (definitions) 规则段 (rules) 用户代码段 (user code) 下面给出一个简单的 Flex 程序, 代码如下所示 : /* hello world for Flex. */ %option noyywrap %{ int char_count = 0; int line_count = 0; %} \n { ++char_count; ++line_count; }. { ++char_count; } int main(int argc, char* argv[]) { yylex();

printf("# of lines = %d, # of chars = %d\n", line_count, char_count); } return 0; 将上述文件保存为 hello.lex, 然后运行如下图所示命令 : 会生成一个 lex.yy.c 的源程序, 将这个 C 源文件编译, 链接即可生成一个可执行程序 运行程序如下图所示 :

3.Flex and Bison in occ 在 OpenCASCADE 的文件夹中也有相关的语法规则定义, 如下图所示 : 由上图可知,OpenCASCADE 的表达式解析功能的实现也是利用了 Flex 和 Bison

4.Conclusion 借助于 Flex 和 Bison 这两个强大的工具, 你可以实现一个高级的计算器, 即任意数学表达式计算器 OpenCASCADE 的 ExprInterp 使用了 Flex 和 Bison 实现了数学表达式的解析计算 当理解了工具的用途, 有兴趣的读者不妨结合 编译原理 等理论知识, 对工具的原理进行一番探究 5.References 1. 严蔚敏, 吴伟民. 数据结构 (C 语言版 ). 清华大学出版社. 1997 2. 赵建华, 郑滔, 戴新宇译. 编译原理. 机械工业出版社. 2011 3. John Levine, flex & bison. O REILLY. 2009