コード例 #1
0
        public void GetList()
        {
            String       actual   = ReservedWord.GetList();
            const String Expected = "GR0, GR1, GR2, GR3, GR4, GR5, GR6, GR7";

            Assert.AreEqual(Expected, actual, "予約語のリストを取得する");
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: charlyz/transition-animator
 /**
  * Constructeur de la classe.
  * @param s: Chemin du fichier source à parser.
  */
 public Parser(String s, String g)
 {
     inputPath   = s;
     grammarPath = g;
     ReservedWord.initRW();
     SpecialChar.initSC();
     Grammar.initGrammar();
 }
コード例 #3
0
 public override bool Transform(ReservedWord node)
 {
     if (node.OriginalValue.ToUpper() == "AS")
     {
         node.Value = string.Empty;
     }
     return(base.Transform(node));
 }
コード例 #4
0
    public void AddReservedWord(ReservedWord word)
    {
        string text = word.text.ToLower();

        if (!this.m_mapReservedWord.ContainsKey(text))
        {
            this.m_mapReservedWord.Add(text, text);
        }
    }
コード例 #5
0
 public override bool ParseDataFromNDT(TsDataReader dr)
 {
     foreach (TsDataReader.Row data in dr)
     {
         ReservedWord reservedWord = new ReservedWord();
         reservedWord.SetData(data);
         NrTSingleton <ReservedWordManager> .Instance.AddReservedWord(reservedWord);
     }
     return(true);
 }
コード例 #6
0
        public static void LoadReservedWord([NotNull] ReservedWordAttribute reservedWordAttribute)
        {
            Assert.ArgumentNotNull(reservedWordAttribute, nameof(reservedWordAttribute));

            var reservedWord = new ReservedWord
            {
                Attribute = reservedWordAttribute
            };

            reservedWords.Add(reservedWord);
        }
コード例 #7
0
ファイル: Lexer.cs プロジェクト: configare/hispeed
 void ReadReserved()
 {
     if (char.IsLetter(this.reader.Current))
     {
         this.ReadName();
         ReservedWord word = ReservedWords.Lookup(this.TokenString);
         if (null != word)
         {
             this.token = word.Token;
             this.op    = word.Operator;
         }
     }
 }
コード例 #8
0
        /// <summary>
        /// Método de equals para comparar o valor do ReservedWord com string ou outro ReservedWord
        /// </summary>
        /// <param name="word"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static bool Equals(ReservedWord word, object obj)
        {
            if (obj is ReservedWord)
            {
                ReservedWord comparedWord = (ReservedWord)obj;
                return(word.Equals(comparedWord));
            }

            if (obj is string)
            {
                string comparedWord = (string)obj;
                return(word.ToString().Equals(comparedWord));
            }

            return(false);
        }
コード例 #9
0
        public override bool Visit(ReservedWord node)
        {
            Regex regex = new Regex("^(AS|DESC|ASC)$", RegexOptions.IgnoreCase);
            Match m     = regex.Match(node.OriginalValue);

            if (m.Success)
            {
                _currentLine = _tabTool.Pad(_currentLine, _LeftIndentSize.Peek());
            }

            //TODO CASE式のパターン実装が難しいので、ひとまずべた書き
            if (node.Value.Equals("CASE", StringComparison.CurrentCultureIgnoreCase))
            {
                _Indents.Push(_tabTool.Pad(string.Empty, _currentLine.Length + 3));
                AddResultSql(node.Value);
            }
            else if (node.Value.Equals("WHEN", StringComparison.CurrentCultureIgnoreCase) ||
                     node.Value.Equals("THEN", StringComparison.CurrentCultureIgnoreCase) ||
                     node.Value.Equals("ELSE", StringComparison.CurrentCultureIgnoreCase))
            {
                AddNewLineResultSql();
                AddResultSql("\t");
                AddResultSql(node.Value);
                AddNewLineResultSql();
                AddResultSql("\t\t\t");
            }
            else if (node.Value.Equals("END", StringComparison.CurrentCultureIgnoreCase))
            {
                AddNewLineResultSql();
                AddResultSql(node.Value);
                _Indents.Pop();
            }
            else
            {
                AddResultSql(node.Value);
            }

            return(base.Visit(node));
        }
コード例 #10
0
        /// <summary>
        /// Método para o não-terminal instrução, dado por:
        ///"instrução :=	PRINT listaprint |
        ///                 INPUT var {,var} |
        ///	                LET var = exp	 |
        ///                 GOTO exp		 |
        ///                 GOSUB exp		 |
        ///                 RETURN			 |
        ///                 IF exp oprel exp THEN exp	|
        ///	                REM string		 |
        ///		            CLEAR			 |
        ///			        RUN				 |
        ///				    RUN exp {,exp}   |
        ///                 LIST			 |
        ///	                LIST exp {,exp}  "
        /// </summary>
        /// <param name="feedback"></param>
        /// <returns></returns>
        private bool Instruction(ref string feedback)
        {
            bool validation = true;

            Token token = Lexic.NextToken();

            if (token == null)
            {
                feedback += INSTRUCTION_INVALID + " , linha: " + line + "\r\n";
                return(false);
            }

            if (token.Type != TokenType.RESERVED_WORD)
            {
                feedback += INSTRUCTION_INVALID + token.Value + " , linha: " + line + "\r\n";
                return(false);
            }

            ReservedWord reservedWord = ReservedWordUtils.GetReservedEnum(token.Value);

            switch (reservedWord)
            {
            case ReservedWord.PRINT:
            {
                validation &= PrintList(ref feedback);
                break;
            }

            case ReservedWord.INPUT:
            {
                token = Lexic.NextToken();

                if (token == null)
                {
                    feedback += INCOMPLETE_TENSE_MISS + "variável, linha: " + line + "\r\n";
                    return(false);
                }

                if (token.Type != TokenType.VARIABLE)
                {
                    feedback += PARAMETER_INVALID + token.Value + " , linha: " + line + "\r\n";
                    return(false);
                }

                while (true)
                {
                    token = Lexic.NextToken();

                    if (token == null)
                    {
                        feedback += INCOMPLETE_TENSE_MISS + "variável, linha: " + line + "\r\n";
                        break;
                    }

                    if (token.Type == TokenType.SEPARATOR)
                    {
                        if (token.Value.Equals(","))
                        {
                            token = Lexic.NextToken();

                            if (token == null)
                            {
                                feedback += INCOMPLETE_TENSE_MISS + "variável, linha: " + line + "\r\n";
                                return(false);
                            }

                            if (token.Type != TokenType.VARIABLE)
                            {
                                feedback += PARAMETER_INVALID + token.Value + " , linha: " + line + "\r\n";
                                return(false);
                            }
                        }
                        else
                        {
                            feedback += SEPARATOR_INVALID + token.Value + " , linha: " + line + "\r\n";
                            return(false);
                        }
                    }
                    else
                    {
                        Lexic.Position--;
                        break;
                    }
                }

                break;
            }

            case ReservedWord.LET:
            {
                token = Lexic.NextToken();

                if (token == null)
                {
                    feedback += INCOMPLETE_TENSE_MISS + "variável, linha: " + line + "\r\n";
                    return(false);
                }

                if (token.Type == TokenType.VARIABLE)
                {
                    token = Lexic.NextToken();

                    if (token == null)
                    {
                        feedback += INCOMPLETE_TENSE_MISS + "=";
                        return(false);
                    }

                    if (token.Type == TokenType.RELATIONAL_OPERATOR && token.Value.Equals("="))
                    {
                        validation &= Expression(ref feedback);
                    }
                    else
                    {
                        feedback += OPERATOR_INVALID + token.Value + " , linha: " + line + "\r\n";;
                        return(false);
                    }
                }
                else
                {
                    feedback += PARAMETER_INVALID + token.Value + " , linha: " + line + "\r\n";
                    return(false);
                }
                break;
            }

            case ReservedWord.GOTO:
            {
                validation &= Expression(ref feedback);
                break;
            }

            case ReservedWord.GOSUB:
            {
                //Casos análogos
                goto case ReservedWord.GOTO;
            }

            case ReservedWord.IF:
            {
                validation &= Expression(ref feedback);

                token = Lexic.NextToken();
                if (token == null)
                {
                    feedback += INCOMPLETE_TENSE_MISS + "variável, linha: " + line + "\r\n";
                    return(false);
                }
                if (token.Type == TokenType.RELATIONAL_OPERATOR)
                {
                    validation &= Expression(ref feedback);
                    token       = Lexic.NextToken();

                    if (token.Type == TokenType.RESERVED_WORD && token.Value.Equals(ReservedWord.THEN.ToString()))
                    {
                        token = Lexic.NextToken();

                        if (token == null)
                        {
                            feedback += INCOMPLETE_TENSE_MISS + "instrução";
                            return(false);
                        }

                        if (token.Type == TokenType.RESERVED_WORD && !token.Value.Equals(ReservedWord.RND.ToString()))
                        {
                            //Retorna uma posição
                            Lexic.Position--;
                            validation &= Instruction(ref feedback);
                        }
                        else
                        {
                            Lexic.Position--;
                            validation &= Expression(ref feedback);
                        }
                    }
                    else
                    {
                        feedback += INCOMPLETE_TENSE_MISS + ReservedWord.THEN.ToString() + INCOMPLETE_TENSE_FOUND + token.Value;
                        return(false);
                    }
                }
                else
                {
                    feedback += OPERATOR_INVALID + token.Value;
                    return(false);
                }
                break;
            }

            case ReservedWord.REM:
            {
                token = Lexic.NextToken();
                if (token.Type != TokenType.STRING)
                {
                    feedback += PARAMETER_INVALID + token.Value + " , linha: " + line + "\r\n";
                    return(false);
                }
                break;
            }

            case ReservedWord.RUN:
            {
                validation &= Expression(ref feedback);

                //Talvez se a gente deixar passar aqui, deixando o validation sempre true, ele servirá para os casos
                //onde o RUN e o LIST são chamados sem parâmetro

                while (true)
                {
                    token = Lexic.NextToken();

                    if (token == null)
                    {
                        break;
                    }
                    if (token.Type == TokenType.SEPARATOR)
                    {
                        if (token.Value.Equals(","))
                        {
                            validation &= Expression(ref feedback);
                        }
                        else
                        {
                            feedback += SEPARATOR_INVALID + token.Value + " , linha: " + line + "\r\n";
                            return(false);
                        }
                    }
                    else
                    {
                        Lexic.Position--;
                        break;
                    }
                }
                break;
            }

            case ReservedWord.LIST:
            {
                //Casos análogos
                goto case ReservedWord.RUN;
            }

            case ReservedWord.RETURN:
                break;

            case ReservedWord.CLEAR:
                break;

            case ReservedWord.THEN: return(false);

            case ReservedWord.RND: return(false);

            case ReservedWord.INVALID: return(false);
            }

            return(validation);
        }
コード例 #11
0
 public virtual bool Visit(ReservedWord node)
 {
     return(true);
 }
コード例 #12
0
 public override bool Transform(ReservedWord node)
 {
     node.Value = CaseFormatUtils.Convert(_entity.ReservedWordCase, node.Value);
     return(base.Transform(node));
 }
コード例 #13
0
 public virtual bool Transform(ReservedWord node)
 {
     return(true);
 }
コード例 #14
0
ファイル: Lexer.cs プロジェクト: configare/hispeed
 static int Compare(ReservedWord reserved1, ReservedWord reserved2)
 {
     return(string.Compare(reserved1.Word, reserved2.Word, false, CultureInfo.InvariantCulture));
 }
コード例 #15
0
        private void CheckIsReserved(String str, Boolean expected, String message)
        {
            Boolean actual = ReservedWord.IsReserved(str);

            Assert.AreEqual(expected, actual, message);
        }