1

我看到一些 C 的示例 main() 浮动,例如http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3http://www.antlr。 org/api/C/index.html

取消引用似乎是 AST。我不知道那是什么,而且——请原谅——如果我能避免的话,我不想这样做。

我想只定义词法分析器和语法(用于调制解调器 AT 命令)并让 main() 自动生成,或从某处剪切/粘贴。

稍微有点扭曲的是,大多数示例似乎都是从文件中读取的,而我将获得一系列输入(AT 命令)作为字符串,作为参数传递。

谁能指点我一个简单的 main() 我可以适应(也许建议如何适应它?)我知道很多要问的问题,对不起。

4

1 回答 1

2

AST 是“抽象语法树”,对于 AT 命令,您不需要它。

事实上,ANTLR 对于解析 AT 命令来说是多余的。为什么不只检查“AT”,然后手动解析命令?调制解调器命令集可能非常简单,如果您以前从未这样做过,这样做会比让 ANTLR 运行更简单。

如果您正在实现完整的 AT 命令集,包括“+++”转义序列,那么时序也是您无法单独使用 ANTLR 实现的一个因素。

回复评论:

将 ANTLR 视为减少错误的工具是合理的。在回答您的问题“您更愿意阅读那个代码还是精心编写的代码?您更愿意维护哪个?”时,答案是“视情况而定”。我根据上下文使用 ANTLR 和手动编码的解析器;这是我会选择手动编码解析器的上下文。一些原因:可能是嵌入式应用程序,相对简单(许多命令不等于复杂性),通信协议。你有不同的背景,显然有你自己的理由,包括“尝试一下”。

所以,要回答你关于主的其他问题:是的,你可以使用 ANTLR wiki 上的那个。从一块内存中读取使用antlr3NewAsciiStringInPlaceStream()antlr3NewAsciiStringCopyStream()(视情况而定)而不是antlr3AsciiFileStreamNew().

于 2009-12-02T06:38:11.730 回答