我正在使用flex和bison进行编译,我必须允许使用//进行注释。 我正在使用flex的开始条件,但它不起作用。
代码:
%x comentario2
%%
"//" {BEGIN(comentario2);}
<comentario2>[^\n]
<comentario2>\n {BEGIN(INITIAL);}
答案 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