ANTLR4 Lexer 不喜欢 Cisco ACE



所以,我尝试解析这样的东西。

允许16任何EQ 30 www任何EQ 80建立的日志输入

我的目标是这样。测试装备的实际输出

您可以看到,16是我的问题。我已经嵌套了规则,它不喜欢它。

相关部分...

ace  : remarks? action source destination ops;
action: ( P | D ) PROTO ;
P : 'permit' ;
D : 'deny' ;
NUMBER : [0-9]+ ;
PROTO : 'ip'
      | 'tcp'
      | 'udp'
      | 'eigrp'
      | 'icmp'
      | NUMBER
      ;
ID : [a-zA-Z-]+ ;

如果数字是第一,我得到了红色16,如果原始是第一,则所有端口下游变成红色。

我知道它只是按顺序运行我的Lex规则,它们模棱两可。原型可以匹配任何数字,因此可以数字。

但是,我试图用它们嵌套和碎片解决。

ace  : remarks? action source destination ops;
action: ( P | D ) ;
P : 'permit' PROTO;
D : 'deny' PROTO;
NUMBER : [0-9]+ ;
fragment PROTO : 'ip'
      | 'tcp'
      | 'udp'
      | 'eigrp'
      | 'icmp'
      | NUMBER
      ;
ID : [a-zA-Z-]+ ;

一旦我这样做,我的" catch-all" ID就会开始吞噬所有内容,它仍然在树上,但我所有的令牌类型都转向ID。

我已经环顾了这个论坛,还有gargler数小时了,我还没有看到任何方法可以解决这个问题,无论如何,我想要的行为在同一语法中的其他地方工作。

destination : address ports? ;
address : ADDRESS ADDRESS | HST ADDRESS | ANY ;
ADDRESS : QUAD DOT QUAD DOT QUAD DOT QUAD ;
fragment QUAD : TWO LO5 LO5 | TWO LO4 DIG | ONE DIG DIG | DIG DIG | DIG ;
fragment DOT : '.' ;
fragment ONE : [1] ;
fragment TWO : [2] ;
fragment LO4 : [0-4] ;
fragment LO5 : [0-5] ;
fragment DIG : [0-9] ;

像冠军一样工作,只能抓住IPS和主机地址而不会失败。当然是"港口?"部分仍然用于垃圾。但是使用同一设置,似乎无法抓住端口/协议。

我错过了一些基本的东西,在将这件事重新安排太久之后...我想知道我是否应该尝试获取如此特定的令牌ID,然后在帖子中处理(又名,稍后有听众)或我的树应包含适当的令牌标签。

**按编号解决的技术协议应为<256因此,正如我定义的那样,它们是四边形,但我无法正常工作...

想法?建议?我有树,那么谁在乎那个地方是否有一个数字?我知道父母是动作,所以右手树是一个数字,应在不到256之后验证吗?我认为歧义是在杀死它,如果我可以重新设计这件事以某种方式消除所有歧义?

(顺便说一句,我是一个自学成才的新手,所以尝试和我说话,就像我没有计算机科学的大学教育,我从未读过《龙书》,而且我已经在Antlr编程了4天。..因为那是您与之交谈的人。)

我知道这是一个旧线程。但是希望这对某人有帮助。您实际上可以使用所有令牌来解析大多数值,然后将其转换为访问者/侦听器代码中的更特定的值(枚举,常数等)。这是对我有用的语法的删除示例

基本语法:

   雷克斯语法基础;        片段小写:[A-Z];    片段大写:[A-Z];    片段:[0-9] ;    fragment Word :(小写| uppercase | number |' - '|'_'|'/') ;    片段newline:' r'' n'        |' n'        |' r';        fragment object_description:'description'; crlf        : 新队 ;        价值        :(字|'。') ;        空格        :'' ->跳过;        忽略        :。 ->跳过;    

访问规则语法:

   语法访问清单;        进口基础;       //Access-List ACL-1扩展许可证UDP |对象网络-Object-1 EQ 123(源)|1.1.1.1 NE www(目的地)|        accessLists :( accessListDestination) ;    AccessListDestination:AccessListSource AccessListTarget('rule-id'aclid = value)?;    AccessListSource:AccessListProtocol AccessListTarget;    AccessListTarget:((            ({_input.lt(1).getText()。匹配(" object | object object-group")}?objectType = value objectName = value)            |({_ input.lt(1).getText()。匹配(" host")}?host = bost = value ip = value)|IP =值        )accessListports?    AccessListPorts :( accessListport | AccessListPortrange);    AccessListPortrange:value startPort = value endport = value;    AccessListport:operorObjectType = value PortorPortGroup = value;        AccessListProtocol:        access_list_key name = value accessListType = access_list_type action = value stolopt = value accessListInterface?;;        AccessListInterface:'ifc'accessListInterFaceName = value;        fragment access_list:'access-list';    片段扩展:"扩展";    片段高级:"高级";

相关内容

  • 没有找到相关文章

最新更新