lex / yacc将无法识别字符串(语法错误)

时间:2012-03-17 22:24:09

标签: lex

你好我想让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

然后它给我一个语法错误 所以有谁知道如何改变它?感谢

1 个答案:

答案 0 :(得分:1)

要使[3]成为可选项,这将不起作用:

[A-Za-z]+("[")?+[0-9]+("]")?+(",")?

你只选了方括号,但不是两者之间的数字。你需要像

这样的东西
[A-Za-z]+("["[0-9]+"]")?

即。整个方括号部分是可选的。

组合(REGEX)?+也没有多大意义(?+部分)。这相当于(REGEX)*,因为您实际上是说(REGEX)是可选的,一次或多次,就像零或更多。

(不确定为什么你在第二个例子中有可选的逗号;第一个没有识别逗号,并且它没有显示在你的示例输入中。)