예제 #1
0
        private static bool CheckZeroOneWholeLine(LineObject lineObject, bool printFlag, CheckSt st, LexRecord lexObj,
                                                  CheckObject checkObject, UpdateLex updateLex)

        {
            bool flag = checkObject.IsNextStartStr(lineObject.GetLine());

            if (flag == true)

            {
                st.UpdateCurState(checkObject.GetNextState());
                lineObject.SetGoToNext(false);
                return(flag);
            }

            if (st.GetCurState() != st.GetLastState())

            {
                st.UpdateLastState();
                flag = CheckOneWholeLine(lineObject, printFlag, st, lexObj, checkObject, updateLex);
            }
            else

            {
                string line = lineObject.GetLine();
                st.UpdateLastState();
                ErrMsg.PrintErrMsg(printFlag, 82, lineObject, line, 0, line.Length, checkObject.IsTab());
            }

            return(flag);
        }
예제 #2
0
        private static bool CheckZeroMany(LineObject lineObject, bool printFlag, CheckSt st, LexRecord lexObj,
                                          CheckObject checkObject, UpdateLex updateLex, bool checkLength)

        {
            lineObject.SetGoToNext(true);
            st.UpdateLastState();

            bool flag = checkObject.IsNextStartStr(lineObject.GetLine());

            if (flag == true)

            {
                st.UpdateCurState(checkObject.GetNextState());
                lineObject.SetGoToNext(false);
                return(flag);
            }

            flag = LineCheck.CheckStartStr(lineObject, printFlag, checkObject);
            if (flag == true)

            {
                TokenObject tokenObject = new TokenObject();

                flag = LineCheck.CheckSlotFiller(lineObject, printFlag, checkObject, tokenObject, checkLength);


                if (flag == true)

                {
                    updateLex.Update(lexObj, tokenObject.GetToken());
                }
            }

            return(flag);
        }
예제 #3
0
        public static bool Check(LineObject lineObject, bool printFlag, CheckSt st, LexRecord lexObj,
                                 CheckObject checkObject, UpdateLex updateLex, int frequency, bool checkLength)

        {
            bool flag = false;

            switch (frequency)

            {
            case 1:
                flag = CheckOne(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength, true);

                break;

            case 2:
                flag = CheckZeroOne(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength);

                break;

            case 3:
                flag = CheckZeroMany(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength);

                break;

            case 4:
                flag = CheckOneMany(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength);

                break;

            case 5:
                flag = CheckOneWholeLine(lineObject, printFlag, st, lexObj, checkObject, updateLex);

                break;

            case 6:
                flag = CheckZeroOneWholeLine(lineObject, printFlag, st, lexObj, checkObject, updateLex);
                break;
            }


            return(flag);
        }
예제 #4
0
        private static bool CheckOneMany(LineObject lineObject, bool printFlag, CheckSt st, LexRecord lexObj,
                                         CheckObject checkObject, UpdateLex updateLex, bool checkLength)

        {
            bool flag = false;

            if (st.GetCurState() != st.GetLastState())

            {
                st.UpdateLastState();
                flag = CheckOne(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength, false);
            }
            else

            {
                st.UpdateLastState();
                flag = CheckZeroMany(lineObject, printFlag, st, lexObj, checkObject, updateLex, checkLength);
            }

            return(flag);
        }
예제 #5
0
        public static bool CheckWholeLine(LineObject lineObject, bool printFlag, CheckObject checkObject)
        {
            string line       = lineObject.GetLine();
            string startStr   = checkObject.GetStartStr();
            bool   flag       = line.Equals(startStr);
            bool   isTab      = checkObject.IsTab();
            int    beginIndex = 0;
            int    endIndex   = startStr.Length;

            if (isTab == true)
            {
                beginIndex = 1;
            }

            if (!flag)
            {
                ErrMsg.PrintErrMsg(printFlag, checkObject.GetStartErrMsg(), lineObject, null, beginIndex, endIndex,
                                   isTab);
            }

            return(flag);
        }
예제 #6
0
        public static bool CheckStartStr(LineObject lineObject, bool printFlag, CheckObject checkObject)
        {
            string line       = lineObject.GetLine();
            string startStr   = checkObject.GetStartStr();
            bool   flag       = line.StartsWith(startStr, StringComparison.Ordinal);
            bool   isTab      = checkObject.IsTab();
            int    beginIndex = 0;
            int    endIndex   = startStr.Length - 1;

            if (isTab == true)
            {
                beginIndex = 1;
            }

            if (!flag)
            {
                ErrMsg.PrintErrMsg(printFlag, checkObject.GetStartErrMsg(), lineObject, null, beginIndex, endIndex,
                                   isTab);
            }

            return(flag);
        }
예제 #7
0
        private static bool CheckOneWholeLine(LineObject lineObject, bool printFlag, CheckSt st, LexRecord lexObj,
                                              CheckObject checkObject, UpdateLex updateLex)

        {
            lineObject.SetGoToNext(true);

            bool flag = LineCheck.CheckWholeLine(lineObject, printFlag, checkObject);


            if (flag == true)

            {
                st.UpdateLastState();
                st.UpdateCurState(checkObject.GetNextState());

                if (updateLex != null)

                {
                    updateLex.Update(lexObj, lineObject.GetLine());
                }
            }

            return(flag);
        }
예제 #8
0
        public static bool CheckSlotFiller(LineObject lineObject, bool printFlag, CheckObject checkObject,
                                           TokenObject tokenObject, bool checkLength)
        {
            string line   = lineObject.GetLine();
            bool   isTab  = checkObject.IsTab();
            string slot   = null;
            string filler = null;
            string delim  = checkObject.GetDelim();
            int    index  = line.IndexOf(delim, StringComparison.Ordinal);

            if (index != -1)
            {
                if (ReferenceEquals(delim, "="))
                {
                    slot   = line.Substring(0, index + 1);
                    filler = line.Substring(index + 1);
                }
                else
                {
                    slot   = line.Substring(0, index + 1);
                    filler = line;
                }
            }
            else
            {
                ErrMsg.PrintErrMsg(printFlag, 80, lineObject, line, 0, line.Length, isTab);
                return(false);
            }

            bool   flag     = false;
            string startStr = checkObject.GetStartStr();

            if (!ReferenceEquals(startStr, null))
            {
                flag = slot.Equals(startStr);
            }

            if (!flag)
            {
                ErrMsg.PrintErrMsg(printFlag, checkObject.GetStartErrMsg(), lineObject, slot, 0, index, isTab);
                return(flag);
            }

            flag = CheckFillerFormat.IsLegalFormat(printFlag, lineObject, filler, index, isTab, checkLength);
            if (!flag)
            {
                return(false);
            }

            CheckFormat fillerFormat = checkObject.GetFillerFormat();

            if (fillerFormat != null)
            {
                flag = fillerFormat.IsLegalFormat(filler);
                if (!flag)
                {
                    ErrMsg.PrintErrMsg(printFlag, checkObject.GetFillerErrMsg(), lineObject, filler, index + 1,
                                       index + filler.Length, isTab);
                    return(flag);
                }
            }

            if ((flag == true) && (tokenObject != null))
            {
                tokenObject.SetToken(filler);
            }

            return(flag);
        }