コード例 #1
0
ファイル: ProseLanguage.cs プロジェクト: FizzyP/ProseCSharp
        //	Build up fundamental words of the language inside the runtime before
        //	it begins processing other commands.
        static public void constructInitialWordTrie(ProseScope scope)
        {
            //	Pack all the data into a list and add each word to the runtime dictionary.
            List <string[]> wordList = buildWordList();

            foreach (string[] wordStrings in wordList)
            {
                scope.addWordFromStrings(wordStrings);
            }
        }
コード例 #2
0
ファイル: ProseLanguage.cs プロジェクト: FizzyP/ProseCSharp
        static public void constructInitialInheritance(ProseRuntime runtime)
        {
            ProseScope scope = runtime.GlobalScope;

            //runtime.Period.addParent(runtime.Comma);
            runtime.Period.addParent(runtime.Semicolon);
            runtime.Semicolon.addParent(runtime.Comma);


            runtime.Word_phrase.addParent(runtime.Word_word);
        }
コード例 #3
0
ファイル: ProseLanguage.cs プロジェクト: FizzyP/Prose
 //    Build up fundamental words of the language inside the runtime before
 //    it begins processing other commands.
 public static void constructInitialWordTrie(ProseScope scope)
 {
     //	Pack all the data into a list and add each word to the runtime dictionary.
     List<string[]> wordList = buildWordList();
     foreach (string[] wordStrings in wordList) {
         scope.addWordFromStrings(wordStrings);
     }
 }
コード例 #4
0
ファイル: ProseLanguage.cs プロジェクト: FizzyP/ProseCSharp
        static public void constructInitialPatternTrie(ProseRuntime runtime)
        {
            ProseScope scope = runtime.GlobalScope;
            Trie <ProseObject, List <Phrase> > patternTrie = scope.PatternTree;

            //
            //	Pattern Creation Pattern
            //

            //	The only pattern we need to "force" into the system is the pattern for making patterns:
            //	word[phrase_class] : @pattern[pattern] -> @prose[value] .

//			Phrase phrasePhrase = new SimplePhrase(runtime.Word_phrase,
//			                                       new ProseObject[] { runtime.Word_word,

            //patternTrie.putObjectString(

            #region Word binding phrases
            //	, word : @raw ,
            {
                ProseObject[] commaDelimitedBindWordsPattern = new ProseObject[]
                { runtime.Comma, runtime.Word_word, runtime.Colon, runtime.@raw, runtime.Comma };
                WordBindingPhrase bindWords_commaDelimited = new WordBindingPhrase(runtime.Word_phrase, commaDelimitedBindWordsPattern);
                scope.addPhrase(bindWords_commaDelimited);
            }
            //	, word +: @raw ,
            {
                ProseObject[] commaDelimitedBindWordsPattern = new ProseObject[]
                { runtime.Comma, runtime.Word_word, runtime.PlusColon, runtime.@raw, runtime.Comma };
                WordBindingPhrase bindWords_commaDelimited = new WordBindingPhrase(runtime.Word_phrase, commaDelimitedBindWordsPattern);
                scope.addPhrase(bindWords_commaDelimited);
            }
            //	, word <- @raw ,
            {
                ProseObject[] commaDelimitedBindWordsPattern = new ProseObject[]
                { runtime.Comma, runtime.Word_word, runtime.LeftArrow, runtime.@raw, runtime.Comma };
                ExclusiveWordBindingPhrase exclusiveBindWords_commaDelimited = new ExclusiveWordBindingPhrase(runtime.Word_phrase, commaDelimitedBindWordsPattern);
                scope.addPhrase(exclusiveBindWords_commaDelimited);
            }

            #endregion

            #region Phrase creation phrases

            //	Comma delimited exclusive phrase creation
            //  , word[class]: @pattern -> @prose[value] ,
            {
                ProseObject[] phrasePattern = new ProseObject[]
                { runtime.Comma, runtime.Word_word, runtime.Colon, runtime.@pattern, runtime.RightArrow, runtime.@prose, runtime.Comma };
                ExclusivePhraseBindingPhrase phrasePhrase = new ExclusivePhraseBindingPhrase(runtime.Word_phrase, phrasePattern);
                scope.addPhrase(phrasePhrase);
            }

            //	Semicolon delimited exclusive phrase creation
            //  ; word[class]: @pattern -> @prose[value] ;
            {
                ProseObject[] phrasePattern = new ProseObject[]
                { runtime.Semicolon, runtime.Word_word, runtime.Colon, runtime.@pattern, runtime.RightArrow, runtime.@prose, runtime.Semicolon };
                ExclusivePhraseBindingPhrase phrasePhrase = new ExclusivePhraseBindingPhrase(runtime.Word_phrase, phrasePattern);
                scope.addPhrase(phrasePhrase);
            }

            //	Period delimited exclusive phrase creation
            //  . word[class]: @pattern -> @prose[value] .
            {
                ProseObject[] phrasePattern = new ProseObject[]
                { runtime.Period, runtime.Word_word, runtime.Colon, runtime.@pattern, runtime.RightArrow, runtime.@prose, runtime.Period };
                ExclusivePhraseBindingPhrase phrasePhrase = new ExclusivePhraseBindingPhrase(runtime.Word_phrase, phrasePattern);
                scope.addPhrase(phrasePhrase);
            }

            #endregion

            #region Reading


            //	, read @string[x] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("read"), runtime.word("@string"), runtime.Comma };
                Phrase readPhrase = new ReadPhrase(runtime.Word_phrase, p);
                scope.addPhrase(readPhrase);
            }


            //	contents of text file @string[file_name]
            {
                ProseObject[] p = new ProseObject[]
                { runtime.word("contents"), runtime.word("of"), runtime.word("text"), runtime.word("file"), runtime.word("@string") };
                Phrase readFilePhrase = new ContentsOfTextFilePhrase(runtime.Word_phrase, p);
                scope.addPhrase(readFilePhrase);
            }

            runtime.read("phrase: , read file @string[path] ,  ->  , read contents of text file path ,", runtime.GlobalClient);

            #endregion

            #region Foreign Function Interface

            //	Load an assembly and bind it to a name
            //  , load assembly : @string[file_name] <- @raw[new_assembly_word] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("load"), runtime.word("assembly"), runtime.Colon,
                  runtime.@string, runtime.LeftArrow, runtime.@raw, runtime.Comma };
                BindAssemblyPhrase asmPhrase = new BindAssemblyPhrase(runtime.Word_phrase, p);
                scope.addPhrase(asmPhrase);
            }

            //	Load a type and bind it to a name
            //  , @assembly[asm_name] type : @string[type_name] <- @raw[new_type_word] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("@assembly"), runtime.word("type"), runtime.Colon,
                  runtime.@string, runtime.LeftArrow, runtime.@raw, runtime.Comma };
                BindTypePhrase typePhrase = new BindTypePhrase(runtime.Word_phrase, p);
                scope.addPhrase(typePhrase);
            }

            //	Load a method and bind it to a name
            //  , @type[type_name] method : @string[method_name] <- @raw[new_method_word] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("@type"), runtime.word("method"), runtime.Colon,
                  runtime.@string, runtime.LeftArrow, runtime.@raw, runtime.Comma };
                BindMethodPhrase methodPhrase = new BindMethodPhrase(runtime.Word_phrase, p);
                scope.addPhrase(methodPhrase);
            }

            //	Apply a method to some arguments to produce an action
            //	, @method[method_name] @prose[args] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("@method"), runtime.@prose, runtime.Comma };
                Phrase applyMethodPhrase = new ApplyMethodPhrase(runtime.Word_phrase, p);
                scope.addPhrase(applyMethodPhrase);
            }

            //	Apply a method with no arguments to produce an action
            //	, @method[method_name] ,
            {
                ProseObject[] p = new ProseObject[]
                { runtime.Comma, runtime.word("@method"), runtime.Comma };
                Phrase applyMethodPhrase = new ApplyMethodPhrase(runtime.Word_phrase, p);
                scope.addPhrase(applyMethodPhrase);
            }

            #endregion

            //	Add a breakpoint
            {
                ProseObject[] p = new ProseObject[]
                { runtime.@break };
                Phrase addBreakpointPhrase = new BreakPointPhrase(runtime.Word_phrase, p);
                scope.addPhrase(addBreakpointPhrase);
            }

            #region Debugger

            #endregion


            #region Experimental
            //	, -> @pattern -> ,
            {
                ProseObject[] test = new ProseObject[]
                { runtime.Comma, runtime.RightArrow, runtime.@pattern, runtime.RightArrow, runtime.Comma };
                DebugOutputPhrase dbg = new DebugOutputPhrase("Carlybou", runtime.Word_phrase, test);
                scope.addPhrase(dbg);
            }
            #endregion
        }