首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写文件格式解释器(C++ Arduino)

编写文件格式解释器(C++ Arduino)
EN

Stack Overflow用户
提问于 2018-10-04 23:50:01
回答 2查看 208关注 0票数 0

所以我有一个想要解释的.txt文件(卓越)。

示例文件:

代码语言:javascript
复制
M48
FMAT,2
ICI,OFF
METRIC,TZ,000.000
T1C1.016
%
G90
M71
T1
X36551Y-569519
X17780Y-589280

当我扫描文件时,我分离语句(例如,指标),并将其保存在一个字符串中。在这之后,我想根据这个字符串的值执行代码。

在检测语句时执行命令的最佳实践是什么?

代码语言:javascript
复制
if(String == "METRIC")
{
  execute code;
}
else if (String == "M48")
{
  execute code;
}
etc.

或者类似这样的东西:

代码语言:javascript
复制
switch(String)
{
  case: "M48"
    execute code;
    break;
  case: "METRIC"
    execute code;
    break;
  etc.
}

或者这两种方法都是错误的,我应该使用不同的方法吗?

我发现了这个:Switch or if statements in writing an interpreter in java他们正在讨论使用地图,我也应该尝试这个吗?如果是这样的话,你能提供一个简单的例子吗?因为我不太理解这种方法。

EN

回答 2

Stack Overflow用户

发布于 2018-10-05 00:13:20

正确的答案取决于许多因素,但从你的帖子的字里行间看,我98%确定你想要的是一个简单的枚举标记器:

代码语言:javascript
复制
enum class Token {
  AAA,
  BBB,
  CCC
};

// Trivially implementable as a if() {} else if {} sequence,
// or as a trie search if you want to get fancy.
Token token_from_string(const std::string& str);

// and in the code.
Token tok = token_from_string(String);
switch(tok) {
  case Token::AAA:
  break;
  case Token::BBB:
  break;
  case Token::CCC:
  break;
}

然后,一种好的做法是在字符串从流中出来时立即对其进行标记,然后对标记本身进行操作。

票数 0
EN

Stack Overflow用户

发布于 2018-10-05 19:06:31

Q:在语句检测时执行命令的最佳实践是什么?

当找到某个字符串时,您想要更改控制流。一个开关说“根据这个变量的值选择一个命令”。您还可以使用if/else。

问:,如果是这样的话,你能提供一个简单的例子吗,因为我不太理解这个方法。

卓越文件格式与CNC g-code并不遥远。

这是一个switch from an EXCELLON to GCODE converter的示例。

诀窍是修改输出方法generateFile,不使用fprint生成G代码文件,而是调用您的命令(可能是move、lift、wait等)。

您也可以从一个g-code parser开始,然后修改它以处理卓越格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52650861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档