我正在创建一个编译器。在c中检查左括号右括号#
当我为我的编译器编写输入代码时,如果缺少括号,编译器应该显示一个错误。当我给简单的输入像function{}
它完美
Stack<int> openingbraces = new Stack<int>();
string output = string.Empty;
for (int i = 0; i < MELEdtior.Length; i++)
{
if (MELEdtior[i] == '{')
{
openingbraces.Push(i);
output="close braces missing";
}
else if (MELEdtior[i] == '}')
{
openingbraces.Push(i);
output = "Open Braces missing";
}
}
if(openingbraces.Count==2)
{
output = "Build Successfull";
}
else
{
output = "brace missing";
}`
:对于我使用这个代码。但我的输入是:
{global gHCIRCIN = OBSNOW("Head circumf")}
{IF gHCIRCCM <> "" AND HeadCircsDifferrev() THEN
OBSNOW("Head circumf",str(rnd(ConvertCMtoIN(gHCIRCCM),2))) ELSE "" ENDIF }
在这里,我的编译器应该检查所有括号的正确性,并显示错误消息。
我的想法是实现这个目标,首先分开开括号和闭括号,然后将它们配对,如果缺少任何一对,我的编译器应该会抛出一条错误消息。我怎样才能实现这个?
注意,它很快变得相当复杂: 'OBSNOW(“{”)'引号内的'{'不应该统计。 – xanatos
基本上你想要做的是当你遇到大括号(不在评论/引号内)时增加计数,当你遇到有效的大括号时减少计数。如果你降到0以下,这意味着一个额外的大括号。如果最后发现您的计数大于0,则意味着您缺少右括号。 –
@xanatos,这种复杂性很容易解决:在我的回答中,我使用RegEx替换了qoute字符之间的文本... – Shnugo