首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析CNC GCODES时的yacc lex

解析CNC GCODES时的yacc lex
EN

Stack Overflow用户
提问于 2017-06-01 03:06:24
回答 1查看 186关注 0票数 0

我必须解析运动控制程序(数控机床,GCODE)

它是GCODE加上类似于硬件的代码。

有许多由单个字母和数字组成的命令,例如:

代码语言:javascript
复制
C100Z0.5C100Z-0.5
C80Z0.5C80Z-0.5

因此,我的(简化的) lex (实际上是racc& rex )的一部分如下所示:

代码语言:javascript
复制
A  {[:A,text]}
B  {[:B,text]}
...
Z  {[:Z,text]}  

因此,我找到了一个可以接受任意字母作为参数的命令,并在racc中开始键入:

代码语言:javascript
复制
letter   : A
         | B
         | C
......

然后我停下来,我已经30年没有使用yacc了,上面有什么捷径吗?我是不是严重偏离正轨了?

EN

回答 1

Stack Overflow用户

发布于 2017-06-15 15:59:06

目前还不清楚你想要实现什么目标。如果您想要创建涵盖所有字母的Yacc规则,您可以为其创建标记:

代码语言:javascript
复制
%token letter_token

在lex中,您可以使用正则表达式查找每个字母,并简单地返回letter_token

代码语言:javascript
复制
Regex for letters {

    return letter_token;
}

现在您可以在Yacc规则中使用letter_token:

代码语言:javascript
复制
letter   : letter_token

你也没有说你使用的是什么语言。但如果需要,您可以通过定义联合来获取使用letter_token分配的特定字符:

代码语言:javascript
复制
%union {

    char c;
}

%token <c> letter_token

假设您想要读取单个字符,则将字符分配给令牌的Lex部分为:

代码语言:javascript
复制
[A-Z] {

    yylval.c = *yytext;
    return letter_token;
}

请随时询问任何进一步的问题,并在此处阅读有关How to create a Minimal, Complete, and Verifiable example的更多信息。

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

https://stackoverflow.com/questions/44292863

复制
相关文章

相似问题

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