带开始条件的评论(flex)

时间:2015-10-13 09:07:34

标签: bison flex-lexer

我正在使用flex和bison进行编译,我必须允许使用//进行注释。 我正在使用flex的开始条件,但它不起作用。

代码:

%x comentario2

%%

"//"    {BEGIN(comentario2);}

<comentario2>[^\n]

<comentario2>\n {BEGIN(INITIAL);}

2 个答案:

答案 0 :(得分:1)

在flex中,.表示与[^\n]完全相同(除了换行符之外的任何字符)。

另外,你的开始状态毫无意义。它只是相当于一个Kleene星(*正则表达式运算符),所以你根本不需要它。只需使用规则:

`//.*`

(没有动作)。

终止评论的\n将不会与该规则匹配,因此将通过您通常用于识别它的任何规则正确处理它。然后,它将被传递给语法而无需您做任何额外的努力。

答案 1 :(得分:0)

问题在于,在我的野牛代码中,我将这个语法用于一行:

 echo ("<SCRIPT LANGUAGE='JavaScript'>
    window.alert('Successful Login')
    window.location.href='adminhome.php';
    </SCRIPT>");
}
else
{
echo ("<SCRIPT LANGUAGE='JavaScript'>
    window.alert('Invalid Login Credentials')
    window.location.href='adminsignin.php';
    </SCRIPT>");
} 

}
}

if(isset($_POST['submit']))
{
SignIn();
}

在我的flex代码中,我没有在行尾返回令牌。正确的flex代码是:

expr NX_LINE