首页 > 解决方案 > 为文件格式编写解释器(C++ Arduino)

问题描述

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

示例文件:

M48
FMAT,2
ICI,OFF
METRIC,TZ,000.000
T1C1.016
%
G90
M71
T1
X36551Y-569519
X17780Y-589280

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

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

if(String == "METRIC")
{
  execute code;
}
else if (String == "M48")
{
  execute code;
}
etc.

或者是这样的:

switch(String)
{
  case: "M48"
    execute code;
    break;
  case: "METRIC"
    execute code;
    break;
  etc.
}

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

我发现了这个:Switch or if statements in writing an interpreter in java they are talking about using a map 我也应该试试这个吗?如果是这样,您能否提供一个简单的示例,因为我不太了解这种方法。

标签: c++interpreter

解决方案


正确的答案将取决于许多因素,但阅读您的文章的字里行间,我 98% 确定您想要的是一个简单的枚举标记器:

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;
}

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


推荐阅读