我正在創建一個編譯器。在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