所以,我尝试解析这样的东西。
允许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'; 片段扩展:"扩展"; 片段高级:"高级";