您好我想检查正则表达式中的特定模式,但我没有这样做。输入应该像
名词 wordname : wordmeaning
我成功获得名词和 wordname ,但无法设计出词义的模式。我的代码是:
int state;
char *meaning;
char *wordd;
^verb { state=VERB; }
^adj { state = ADJ; }
^adv { state = ADV; }
^noun { state = NOUN; }
^prep { state = PREP; }
^pron { state = PRON; }
^conj { state = CONJ; }
//my try but failed
[:\a-z] {
meaning=yytext;
printf(" Meaning is getting detected %s", meaning);
}
[a-zA-Z]+ {
word=yytext;
}
示例输入:
noun john:This is a name
现在word
应该等于john
而meaning
应该等于This is a name
。
答案 0 :(得分:0)
同意lex状态(也称为开始条件)是要走的路(奇怪,但没有有用的教程)。
简言之:
,声明状态,例如,
%s TYPE NAME VALUE
<
>
括号中,告诉lex模式仅在这些状态中使用。当重要时,您可以列出多个以逗号分隔的状态。但是你的lex文件可能不需要那样。INITIAL
。您的程序使用BEGIN()
宏在操作中切换状态,例如,
{ BEGIN(TYPE); }
NAME
状态开始。在NAME
状态下,你的词法分析器会查找你认为名字应该是什么,例如,
<NAME>[[:alpha:]][[:alnum:]]+ { my_name = strdup(yytext); }
名称以冒号结尾,所以
<NAME>":" { BEGIN(VALUE); }
然后是值,直到行尾,例如,
<VALUE>.* { my_value = strdup(yytext); BEGIN(INITIAL); }
INITIAL
或TYPE
取决于您可能添加到词法分析器的其他内容(例如忽略注释行和空格)。进一步阅读: