我想解析以下类型的字符串:
ll = LinkedList()
ll.AddMusicToTheFront(music(1, "Lauv", "Chasing Fire"))
ll.AddMusicToTheFront(music(2, "Panic! At The Disco", "High Hopes"))
ll.AddMusicToTheFront(music(3, "Bishop Briggs", "River"))
ll.AddMusicAtPosition(music(4,"Why Don't We", "Hooked"),2)
for i in range (0,ll.len_link()):
music.printlist()
'='周围没有空格,值一直扩展到换行符。可能会有前导空格。
我的lex规范(相关部分)是:
a=some value
b=some other value
我尝试了%%
a= { printf("Found attr %s\n", yytext); return aATTR; }
^[ \r\t]+ { printf("Found space at the start %s\n", yytext); }
([^a-z]=).*$ { printf("Found value %s\n", yytext); }
\n { return NEWLINE; }
%%
和其他一些正则表达式,但无济于事。
这看起来很简单。有什么建议么?我还知道lex返回最长的匹配项,这使它进一步复杂化。我得到了与我尝试过的某些正则表达式匹配的整个行。
答案 0 :(得分:1)
您可能希望合并单独的开始状态。这些允许您对简单的上下文进行编码。下面的简单示例捕获了每次调用yylex()的ID,运算符和值。
%{
char id;
char op;
char *value;
%}
%x VAL OP
%%
<INITIAL>[a-z]+ {
id = yytext[0];
yyleng = 0;
BEGIN OP;
}
<INITIAL,OP>[ \t]*
<OP>=[ \t]* {
op = yytext[0];
yyleng = 0;
BEGIN VAL;
}
<VAL>.*\n {
value = yytext;
BEGIN INITIAL;
return 1;
}
%%