Antlr 动态调用在运行时更新规则

Antlr 动态调用在运行时更新规则,antlr,antlr3,Antlr,Antlr3,发送AT命令时,它通常由\r\n终止,但实际上,这实际上是两个“寄存器变量”S3和S4 默认情况下,S3='\r'和S4='\n',但用户可以在运行时使用命令ATSx更改它们= 我如何在我的Antlr lexer/解析器中处理这个问题 每个命令的形式为[parameters]S3S4,如果用户更改S3或S4的值,我如何处理 提前感谢您提供的任何帮助。不,AFAIK没有动态更改lexer或parser规则的选项。当然,也有一些可能的解决方法,比如在更改寄存器变量时重新创建lexer/parser’

发送AT命令时,它通常由\r\n终止,但实际上,这实际上是两个“寄存器变量”S3和S4

默认情况下,S3='\r'和S4='\n',但用户可以在运行时使用命令ATSx更改它们=

我如何在我的Antlr lexer/解析器中处理这个问题

每个命令的形式为[parameters]S3S4,如果用户更改S3或S4的值,我如何处理


提前感谢您提供的任何帮助。

不,AFAIK没有动态更改lexer或parser规则的选项。当然,也有一些可能的解决方法,比如在更改寄存器变量时重新创建lexer/parser’,但我想这不会很好


编辑

mawg撰写了


重新创建lexr&poarser(好吧,我想只有lexer)——你能在这方面做些什么吗


重写原始语法文件(只有lexer规则,正如您正确提到的)并动态重新编译它。请看:

没有人知道吗?嘿,帮帮忙!!!!请…重新创建lexr&poarser(好吧,我想只有lexer)-你能解释一下吗?我正在命令集解析Hayes调制解调器。AT命令定义良好,我可以用lexer/parser规则完全覆盖它们。正如我所说的,每一行通常以\r\n结尾,但这些都在寄存器S3和S4中,用户可以更改这些寄存器。除了“blank”和\n之外,我从未见过任何东西,但理论上它们可能是任何东西。。。