【发布时间】:2017-05-28 01:32:39
【问题描述】:
我是新手,我想知道如何将匹配的字符存储在 Flex 程序中,然后将它们打印在 main 的一行中。我有以下模式和规则:
ID [A]
ID1 [B]
ID2 [C]
ID3 [D]
%%
{ID}
{ID1}
{ID2}
{ID3}
【问题讨论】:
-
这不是
yytext的用途吗?当然,就目前而言,您只有模式的默认操作(根据我的思维方式,ID应该有一个数字后缀——但这是一个美学问题),所以您需要做一些工作给main()一个处理匹配字符的机会。具有如图所示的单字母字符类有点奇怪,尽管在形式上并没有错。你也应该使用一些空间。 -
是的,main 中有一个 yytext()
-
yytext()?一个函数?我习惯于认为yytext是char yytext[];或char *yytext;,我似乎记得哪个变体可用取决于使用哪个Lex 变体,我不记得Flex 做了什么。您需要在每个模式之后添加一些内容以返回main()— 类似{ return 1; }的内容表示匹配成功。 IIRC,任何不匹配的内容都会被忽略。 -
用户在给 ABCE 时检查了每个字符,当匹配完成后我想打印 ABCE 在主要部分匹配
-
您误解了 Flex 的功能。您说过“一个令牌是 A;一个令牌是 B;一个令牌是 C;一个令牌是 D;一个令牌是 E”。如果您希望您的程序聚合所有这些,您必须安排这样做 - Flex 词法分析器中的标记化代码识别标记并安排在识别标记时执行您选择的代码(并且
yytext指向 (包含)最近匹配的标记——但只有最近匹配的标记;没有任何先前或后续标记)。
标签: c flex-lexer