文本协议解析
来源:互联网 发布:好听女装淘宝店铺名字 编辑:程序博客网 时间:2024/04/29 18:13
Antlr 可以用于编译器的语法解析,同样我们可以使用 Antlr 来解析 文本协议。
一、工作流程
第一步,根据 *.g 文件的词法,将文本协议分成很多个小块。
在没有特定“词法规则”时,antlr会跳过 空格、换行等。如果我们在自己的“词法规则”中定义了 空格、换行等的识别,可能导致antlr无法正常工作。
写词法规则时,要保证不能有二义性。
第二步,根据词法分析输出的小块,逐个同“语法规则”进行匹配。
二、工具软件
Antlrwork:Java 开发的调试环境,需要JRE支持
Antlr plug:eclipse的插件,Java进行二次开发时需要的文件。
Antlr3.exe:.net开发的 代码生成器,直接将 *.g 文件作为输入,生成响应的代码。
Antlr3.Runtime:.net二次开发需要的文件。
三、语法
1、格式
小写字母开头的规则为“语法规则”,否则为“词法规则”。
规则名后使用 “:”开始定义规则,以“;”结束规则定义(包含其它形式的语句)。
2、规则
① grammar LDF21; // grammar 定义名称,需要同文件名一致
② options // 全局选项,每个规则也可以设定一些选项
{
language = CSharp3; // 输出语言为 CSharp3
...
}
③ @header // 生成的语法文件中 自定义的头文件
{
using System;
}
lexer::@header // 生成的词法文件中 自定义的头文件
{
using System;
}
④ @members // 生成的语法文件中 自定义代码
{
}
⑤ public lin_ldf_entry... // 入口规则,这样才能开始所有的语法分析,所有语法应从此处发散,public 用在 C#中,申明入口方法为可见的。
⑥ slave_resp
[int i] // 参数
returns[int num] // 返回值,定义后,响应子方法返回类将添加成员变量
@init // 初始化操作,将直接添加到方法中。
{
$num = ... // 使用 返回类 的成员变量
}
: 'SlaveResp' ':' INT
'{'
'SlaveRespB0' ',' b0 = INT ';'{$num = Convert.ToInt32(bo.Text);}
// 将子规则bo的数据拷贝到返回类的成员中,{ }中为自定义代码。这样逐级使用,可以完成语法分析的绝大部工作,后续进行一些语法验证即可。
'}'
;
- 文本协议解析
- 【C#串口编程计划】C#串口协议解析 -- 文本数据
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析
- 文本解析
- 文本协议与二进制协议
- Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范
- [编程之美2.4]1的数目
- ThreadLocal模式的纵向隔离与横向隔离
- 【APIO2009】【强连通分量】【DAG】抢掠计划
- linux下svn的使用
- JAVA语法糖之自动装箱的陷阱
- 文本协议解析
- TMS320F28335的中断系统——CPU级中断
- 4.10作业
- 树状数组(4)
- ext时间格式的转换 提供三种转换
- 勾股数组
- 重要开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- 程序员面试100题之三:不用+、-、×、÷数字运算符做加法
- 网易游戏2011招聘笔试题+答案解析