你好我想让lex / yacc拆分这个字符串
table subwayLines:int[3]
表,subwayLines,int [3]的标记,[3]可选(即int或int [3])
一切都很好,直到我尝试识别“int”, 这就是我在lex中所做的事情
[A-Za-z0-9\[\]]+ { /* column property*/
yylval.sval = (char *)strdup(yytext);
char* temp=yylval.sval;
return STRING;
}
我知道问题出在
[A-Za-z0-9\[\]]+
因为我把它改成了
[A-Za-z]+("[")?+[0-9]+("]")?+(",")?
它的工作原理除了我仍然不能没有“[”或“]”,例如,如果我在我的字符串中写这个:
table subwayLines:int
然后它给我一个语法错误 所以有谁知道如何改变它?感谢
答案 0 :(得分:1)
要使[3]
成为可选项,这将不起作用:
[A-Za-z]+("[")?+[0-9]+("]")?+(",")?
你只选了方括号,但不是两者之间的数字。你需要像
这样的东西[A-Za-z]+("["[0-9]+"]")?
即。整个方括号部分是可选的。
组合(REGEX)?+
也没有多大意义(?+
部分)。这相当于(REGEX)*
,因为您实际上是说(REGEX)
是可选的,一次或多次,就像零或更多。
(不确定为什么你在第二个例子中有可选的逗号;第一个没有识别逗号,并且它没有显示在你的示例输入中。)