2009-12-02 31 views
1

我看到几个C()的样例main(),例如, http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3http://www.antlr.org/api/C/index.html寻找Antlr 3/C sample main()

提领似乎是AST。我不知道那是什么,并且 - 请原谅我 - 不想如果我能避免它。

我很想知道如何定义词法分析器&语法(用于调制解调器AT命令),并具有main()自动生成或从某处剪切/粘贴的功能。

起家轻微的扭曲是最例子似乎从文件中读取,而我会得到一系列的输入(AT命令)的字符串,作为参数传递。

任何人都可以请点我在一个简单的main(),我可以适应(也许建议藿适应吗?)有很多问我知道,对不起。

回答

2

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

事实上,ANTLR对于解析AT命令来说是过分的。为什么不检查“AT”,然后手动解析命令?调制解调器命令集可能非常简单,以至于如果你以前从未做过ANTLR,那么做起来会更简单。

如果要实现一个完整的AT命令集,包括“+++”转义序列,时间也是你将不能够单独使用ANTLR来实现的一个因素。

回应评论:

看到ANTLR作为一种工具来减少错误是合理的。在回答你的问题时:“你愿意阅读还是已经制作好的代码?你宁愿保留哪一个?”,答案是“这取决于”。我根据上下文使用ANTLR和手工编码解析器;这是我选择手动编码解析器的上下文。一些原因:可能是嵌入式应用程序,相对简单(许多命令不等于复杂性),通信协议。你有不同的背景,显然有你自己的理由,包括“试用”。

因此,要回答你对主的其他问题:是的,你可以使用在ANTLR维基之一。要从一块内存中读取,请使用antlr3NewAsciiStringInPlaceStream()antlr3NewAsciiStringCopyStream()(根据需要)而不是antlr3AsciiFileStreamNew()

+0

感谢澄清AST ;-) 顺便说一句,你可以点我在样品的main()?我可以在http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3上使用它吗? – Mawg 2009-12-03 03:12:02

+0

我认为你“误解”了AT命令的复杂性。一般来说,对于任何非平凡的语法,我都会更喜欢解析器,而不是手工制作。首先,AntlrWorks语法的可视化表示已经帮助我发现了一些错误,代码阅读和单元测试可能不会从手工解析器中获得所有错误,我将Antlr看作是另一种帮助减少错误数量的工具。 我在之前的工作中看到一个灾难性的手工解析器后,通过一种兴趣来做这件事。 27.007,我认为,25.007(短信)有几百个命令。 – Mawg 2009-12-03 03:13:01

+0

诀窍是有些人有可选的子部分,哦,我只是认为阅读和维护词法分析器/解析器比手写代码更容易。 我会张贴详细的拨号comamnd,这是最复杂的,在几个意见(由于大小限制)之一,以显示我的意思... – Mawg 2009-12-03 03:13:51