文件格式的编写解释器(C++ Arduino)
write interpreter for file format (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或者如果用java编写解释器的语句,他们正在谈论使用map,我也应该尝试一下吗?如果是这样,你能提供一个简单的例子,因为我真的不明白这种方法。
正确的答案将取决于许多因素,但是阅读您帖子的字里行间,我 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;
}
然后,一个好的做法是在字符串从流中出来后立即对其进行标记化,然后对令牌本身进行操作。
问:在语句检测时执行命令的最佳实践是什么?
您希望在找到特定字符串时更改控制流。 开关显示"根据此变量值选择命令之一"。你也可以使用 if/else。
问:如果是这样,你能提供一个简单的例子,因为我不太了解这种方法。
Excellon文件格式与CNC g代码相差不远。
这是从赛隆切换到GCODE转换器的示例。
诀窍是修改输出方法 generateFile,不使用 fprint 生成 G 代码文件,而是调用您的命令(可能是移动、提升、等待等(。
您也可以从g代码解析器开始,并对其进行修改以处理excellon格式。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 人脸跟踪arduino代码的优化
- vscode下的Arduino代码出现意外编译错误
- Arduino从Txt读取整数
- Arduino C++在构造函数中用参数声明对象数组
- C++ Boost::asio串行通信与Arduino无法写入
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 'val' Arduino 错误代码之前的预期'('
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- Arduino-C++ bool 不会从 false 变为 true
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- cmsis_compiler.h:在为 Arduino Due 编译 Arduino Tensorflow lite 库
- Arduino SocketIoClient - 没有用于调用的匹配函数
- Arduino无法编译名为SP:"Expected ')' before '(' token"的变量
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题