文本协议解析

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的数据拷贝到返回类的成员中,{ }中为自定义代码。这样逐级使用,可以完成语法分析的绝大部工作,后续进行一些语法验证即可。
    '}'
  ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值