我必须解析运动控制程序(数控机床,GCODE)
它是GCODE加上类似于硬件的代码。
有许多由单个字母和数字组成的命令,例如:
C100Z0.5C100Z-0.5
C80Z0.5C80Z-0.5因此,我的(简化的) lex (实际上是racc& rex )的一部分如下所示:
A {[:A,text]}
B {[:B,text]}
...
Z {[:Z,text]} 因此,我找到了一个可以接受任意字母作为参数的命令,并在racc中开始键入:
letter : A
| B
| C
......然后我停下来,我已经30年没有使用yacc了,上面有什么捷径吗?我是不是严重偏离正轨了?
发布于 2017-06-15 15:59:06
目前还不清楚你想要实现什么目标。如果您想要创建涵盖所有字母的Yacc规则,您可以为其创建标记:
%token letter_token在lex中,您可以使用正则表达式查找每个字母,并简单地返回letter_token
Regex for letters {
return letter_token;
}现在您可以在Yacc规则中使用letter_token:
letter : letter_token你也没有说你使用的是什么语言。但如果需要,您可以通过定义联合来获取使用letter_token分配的特定字符:
%union {
char c;
}
%token <c> letter_token假设您想要读取单个字符,则将字符分配给令牌的Lex部分为:
[A-Z] {
yylval.c = *yytext;
return letter_token;
}请随时询问任何进一步的问题,并在此处阅读有关How to create a Minimal, Complete, and Verifiable example的更多信息。
https://stackoverflow.com/questions/44292863
复制相似问题