我有这一行:
0, 6 -> W(1) L(#);
或
\# -> @shift_right R W(1) L
我必须使用flex解析这一行,并从箭头的每个部分获取每个元素并将其放入列表中。我知道如何匹配简单的事情,但我不知道如何使用相同的规则匹配多个事物。我不允许增加规则限制。我有一个提示:解析碎片,碎片然后合并,我可以使用状态,但我不知道该怎么做,我在网上找不到例子。有人能帮助我吗?
所以,这里有一个例子:
{
a - > W(b)#invert_loop;
b - > W(a)#invert_loop;
- > L(#)
}
当这一部分开始时,我必须为每一行创建一个结构,我把它放在左边的 - >在向量中,这些是一些参数,在列表中是右侧,其中每个术语都是另一种结构。对于右边的内容,我写了规则:
对于W(任何事物),writex W([a-zA-Z0-9。#])。
所以我需要解析这些行,所以我可以将参数和结构放在大结构中。像这样的东西(第一行):
带有param = a的新bigStruc和struct = W(任何东西)的列表,#invert(它是对另一个结构的引用的表示法)
所以我需要的是知道如何解析这些行,以便我可以创建和创建并填充这些bigStruct,也可以使用简单结构的规则(我拥有这些结构所需的全部,但我不知道如何解析,以便我可以使用这些方法)。
对不起我的英语,我希望这次我对自己的想法更加清楚。
最后一分钟编辑:我已将整条线与规则匹配,然后使用strtok进行处理。有一种方法可以使用以前的规则来查看我必须创建的结构类型?我的意思是不留下并且放了很多if,但是使用writex W([a-zA-Z0-9。#])知道我必须创建那种结构?
答案 0 :(得分:0)
好的,让我们看看这个代码段如何为您服务:
// these are exclusive rules, so they do not overlap, for inclusive rules, use %s
%x dataStructure
%x addRules
%%
<dataStructure>-> { BEGIN addRules; }
\{ { BEGIN dataStructure; }
<addRules>; { BEGIN dataStructure; }
<dataStructure>\} { BEGIN INITIAL; }
<dataStructure>[^,]+ { ECHO; } //this will output each comma separated token
<dataStructure>. { } //ignore anything else
<dataStructure>\n { } //ignore anything else
<addRules>[^ ]+ { ECHO; } //this will output each space separated rule
<addRules>. { } //ignore anything else
<addRules>\n { } //ignore anything else
%%
我不完全确定你想要的是什么。编辑原始帖子以包含评论内容和示例,请更好地构建您的英语。如果你无法解释自己想要什么而不与自己发生矛盾,我无法帮助你。