Ejemplo n.º 1
0
 //    Start a pattern match at the beginning with one object.
 internal PatternMatcher(ProseRuntime runtime)
 {
     this.runtime = runtime;
     patternTrie = runtime.GlobalScope.PatternTree;
     state = MatcherState.MATCHING_OBJECT;
     currNode = patternTrie.Root;
 }
Ejemplo n.º 2
0
        //    First argument = application file name
        //    Further arguments = command line arguments
        public static void WriteToShell(ProseRuntime runtime, List<ProseObject> args)
        {
            string appName;
            string argString;

            if (args.Count == 0)
                throw new ArgumentException("Shell command missing executable file name.");

            if (args[0] is StringLiteralObject) {
                appName = ((StringLiteralObject) args[0]).literal;
            }
            else
                appName = args[0].getReadableString();

            StringBuilder argBuilder = new StringBuilder();
            for (int i=1; i < args.Count; i++) {
                if (args[i] is StringLiteralObject) {
                    argBuilder.Append(((StringLiteralObject) args[i]).literal);
                }
                else
                    argBuilder.Append(args[i].getReadableString());

                argBuilder.Append(" ");
            }
            argString = argBuilder.ToString();

            PrivateWriteToShell(runtime, appName, argString);
        }
Ejemplo n.º 3
0
 public override void performAction(ProseRuntime runtime)
 {
     //	Create/fetc a possibly new word object representing the words.
     Word newWord = runtime.addWordFromRawWords(rawWordsToBindAsWord);
     //	Bind the word using inheritence
     newWord.isa = new Word[] { parent };
 }
Ejemplo n.º 4
0
 public void performAction(ProseRuntime runtime)
 {
     //	Look up the type.
     Type type = assemblyWord.AssemblyObject.GetType(typeName);
     TypeNameWord typeNameWord = new TypeNameWord(rawWords, runtime, type);
     runtime.addWord(typeNameWord);
 }
Ejemplo n.º 5
0
 //	Start a pattern match at the beginning with one object.
 internal PatternMatcher(ProseRuntime runtime)
 {
     this.runtime = runtime;
     patternTrie  = runtime.GlobalScope.PatternTree;
     state        = MatcherState.MATCHING_OBJECT;
     currNode     = patternTrie.Root;
 }
Ejemplo n.º 6
0
        public void performAction(ProseRuntime runtime)
        {
            //	Look up the type.
            Type         type         = assemblyWord.AssemblyObject.GetType(typeName);
            TypeNameWord typeNameWord = new TypeNameWord(rawWords, runtime, type);

            runtime.addWord(typeNameWord);
        }
Ejemplo n.º 7
0
 public void performAction(ProseRuntime runtime)
 {
     //	Load the dll
     Assembly assembly = Assembly.LoadFrom(dllName);
     //	Build an assembly word from it
     AssemblyNameWord asmName = new AssemblyNameWord(rawWords, runtime, assembly);
     runtime.addWord(asmName);
 }
        public override void performAction(ProseRuntime runtime)
        {
            //	Create/fetc a possibly new word object representing the words.
            Word newWord = runtime.addWordFromRawWords(rawWordsToBindAsWord);

            //	Bind the word using inheritence
            newWord.isa = new Word[] { parent };
        }
Ejemplo n.º 9
0
        private static void PrivateWriteToShell(ProseRuntime runtime, string appName, string argString)
        {
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine();

            ProcessStartInfo startInfo = new ProcessStartInfo(appName, argString);
            Process.Start(startInfo);
        }
Ejemplo n.º 10
0
        public void performAction(ProseRuntime runtime)
        {
            //	Load the dll
            Assembly assembly = Assembly.LoadFrom(dllName);
            //	Build an assembly word from it
            AssemblyNameWord asmName = new AssemblyNameWord(rawWords, runtime, assembly);

            runtime.addWord(asmName);
        }
Ejemplo n.º 11
0
        public void performAction(ProseRuntime runtime)
        {
            //	Look up the type.

            MethodInfo methodInfo = typeWord.TypeObject.GetMethod(methodName, BindingFlags.Public|BindingFlags.Static);
            ProseLanguage.ActionDelegate delegateMethod = (ProseLanguage.ActionDelegate) Delegate.CreateDelegate(typeof(ProseLanguage.ActionDelegate), methodInfo);
            MethodNameWord methodNameWord = new MethodNameWord(rawWords, runtime, delegateMethod);
            runtime.addWord(methodNameWord);
        }
Ejemplo n.º 12
0
 public virtual void performAction(ProseRuntime runtime)
 {
     //	Create/fetc a possibly new word object representing the words.
     Word newWord = runtime.addWordFromRawWords(rawWordsToBindAsWord);
     //	Bind the word using inheritence
     Word[] newIsa = new Word[newWord.isa.Length + 1];		//	Copy all the old inherited words.
     Array.Copy(newWord.isa, newIsa, newWord.isa.Length);
     newIsa[newWord.isa.Length] = parent;					//	Add this new one.
     newWord.isa = newIsa;
 }
Ejemplo n.º 13
0
        public static 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);
        }
Ejemplo n.º 14
0
 public void performAction(ProseRuntime runtime)
 {
     try {
         method(runtime, args);
     }
     catch (Exception e) {
         //	If anything goes wrong we "throw an exception" on the side.
         runtime.read("foreign function exception: \"" + e.Message + "\"", runtime.GlobalClient);
     }
 }
Ejemplo n.º 15
0
 public void performAction(ProseRuntime runtime)
 {
     try {
         method(runtime, args);
     }
     catch (Exception e) {
         //	If anything goes wrong we "throw an exception" on the side.
         runtime.read ("foreign function exception: \"" + e.Message + "\"", runtime.GlobalClient);
     }
 }
Ejemplo n.º 16
0
        virtual public void performAction(ProseRuntime runtime)
        {
            //	Create/fetc a possibly new word object representing the words.
            Word newWord = runtime.addWordFromRawWords(rawWordsToBindAsWord);

            //	Bind the word using inheritence
            Word[] newIsa = new Word[newWord.isa.Length + 1];                           //	Copy all the old inherited words.
            Array.Copy(newWord.isa, newIsa, newWord.isa.Length);
            newIsa[newWord.isa.Length] = parent;                                        //	Add this new one.
            newWord.isa = newIsa;
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        public void performAction(ProseRuntime runtime)
        {
            //	Look up the type.

            MethodInfo methodInfo = typeWord.TypeObject.GetMethod(methodName, BindingFlags.Public | BindingFlags.Static);

            ProseLanguage.ActionDelegate delegateMethod = (ProseLanguage.ActionDelegate)Delegate.CreateDelegate(typeof(ProseLanguage.ActionDelegate), methodInfo);
            MethodNameWord methodNameWord = new MethodNameWord(rawWords, runtime, delegateMethod);

            runtime.addWord(methodNameWord);
        }
Ejemplo n.º 19
0
        public static void OpenURL(ProseRuntime runtime, List<ProseObject> args)
        {
            string siteName = "http://";
            if (args.Count == 1 && args[0] is StringLiteralObject) {
                siteName += ((StringLiteralObject) args[0]).literal;
            }
            else
                throw new ArgumentException("OpenURL expects a single string argument.");

            PrivateWriteToShell(runtime, siteName, "");
        }
Ejemplo n.º 20
0
Archivo: Time.cs Proyecto: FizzyP/Prose
        /*
         * 		Expects all arguments to be strings.
         *
         * 		@string[delay] @string[script]
         */
        public static void ReadStringAfterDelay(ProseRuntime runtime, List<ProseObject> args)
        {
            lock(lockObj) {
                if (args.Count != 2)
                    throw new ArgumentException("ReadAfterDelay takes two string arguments: delay, script.");
                foreach (ProseObject arg in args)
                    if (!(arg is StringLiteralObject))
                        throw new ArgumentException("ReadAfterDelay takes only string arguments.");

                //	Parse the args for the delay and the script
                double seconds = Double.Parse(((StringLiteralObject) args[0]).literal);
                RuntimeRunnable script = new ProseStringReader(((StringLiteralObject) args[1]).literal);

                //	Configure the timer
                Timer timer = new Timer(seconds * 1000);
                timer.AutoReset = false;
                timer.Elapsed += new ElapsedEventHandler(onTimeElapsed);

            //				timer.Elapsed += delegate(object sender, ElapsedEventArgs e)
            //					{
            //						lock(lockObj) {
            //							//	Look up the timer fired
            //							int idx = timerList.BinarySearch((Timer) sender);
            //						Console.WriteLine(idx);
            //							//	Run the script
            //							//runtime.read(scriptList[idx], runtime.GlobalClient);
            //							runtimeList[idx].read("write \"Hello Carly\"", runtimeList[idx].GlobalClient);
            //						//	Remove the timer and the script from the lists
            //							timerList.RemoveAt(idx);
            //							scriptList.RemoveAt(idx);
            //							runtimeList.RemoveAt(idx);
            //						}
            //					};
                timer.Enabled = true;

                //	Add the timer and the script to the list
                timerList.Add(timer);
                scriptList.Add(script);
                runtimeList.Add(runtime);
            }
        }
Ejemplo n.º 21
0
Archivo: Time.cs Proyecto: FizzyP/Prose
        public static void ReadProseAfterDelay(ProseRuntime runtime, List<ProseObject> args)
        {
            lock(lockObj) {
                if (args.Count < 2)
                    throw new ArgumentException("ReadProseAfterDelay takes two arguments: @string[delay] @prose[script].");

                //	Parse the args for the delay and the script
                double seconds = Double.Parse(((StringLiteralObject) args[0]).literal);
                RuntimeRunnable script = new ProseObjectListReader(args.GetRange(1, args.Count - 1));

                //	Configure the timer
                Timer timer = new Timer(seconds * 1000);
                timer.AutoReset = false;
                timer.Elapsed += new ElapsedEventHandler(onTimeElapsed);

                timer.Enabled = true;

                //	Add the timer and the script to the list
                timerList.Add(timer);
                scriptList.Add(script);
                runtimeList.Add(runtime);
            }
        }
Ejemplo n.º 22
0
 public void performAction(ProseRuntime runtime)
 {
     runtime.read(readMe, runtime.GlobalClient);
 }
Ejemplo n.º 23
0
 public bool doBreakPoint(ProseRuntime runtime, PNode source, BreakPointObject.RuntimeData rtdata)
 {
     return(onBreak(runtime, source, rtdata));
 }
Ejemplo n.º 24
0
        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
        }
Ejemplo n.º 25
0
 public bool doBreakPoint(ProseRuntime runtime, PNode source, BreakPointObject.RuntimeData rtdata)
 {
     return onBreak (runtime, source, rtdata);
 }
Ejemplo n.º 26
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 public static void ErrorMethod(ProseRuntime runtime, List<ProseObject> args)
 {
     reportException(assembleArgumentsIntoString(args, "ErrorMethod takes only string arguments."));
 }
Ejemplo n.º 27
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 public static void ContinueFromBreakPoint(ProseRuntime runtime, List<ProseObject> args)
 {
     shouldContinue = true;
 }
Ejemplo n.º 28
0
        public PNode parseTokensIntoPNodes(ProseRuntime runtime, ProseClient who, List <LexerToken> tokens)
        {
            //	Save the parameters
            this.who        = who;
            this.runtime    = runtime;
            sourceTokenList = tokens;

            setupForParsing();

            Trie <RawWord, Word> .Node currWordLookupNode, wordLookupRoot, lastGoodNode;
            wordLookupRoot     = runtime.getWordLookupRoot();
            currWordLookupNode = wordLookupRoot;
            lastGoodNode       = null;
            int lastGoodNodeTokenIdx = -1;
            //	Record whether or not we're in the process of building up a word.
            bool isBuildingWord        = false;
            int  lastProcessedTokenIdx = -1;

            while (tokenIdx < tokens.Count)
            {
                LexerToken token = tokens[tokenIdx];

                //
                //	Deal With Quadquotes.
                //
                if (token.rawWord == ProseLanguage.Raw.Quadquote)
                {
                    //	First clean up any word we may be building and write it to output.
                    if (isBuildingWord)
                    {
                        if (lastGoodNode == null)
                        {
//							//	If we're inside a quadquote block then this is fine: even if we don't have
//							//	a legitimate word we can still wrap rawwords.  Otherwise it's an error.
//							if (insideQuadquoteExpression)
                            {
                                //	If there is no last good match, then take the raw words we've passed
                                //	and dump them all into raw word objects.
                                for (int i = lastProcessedTokenIdx + 1; i < tokenIdx; i++)
                                {
                                    writePNode(new PNode(new RawWordObject(tokens[i].rawWord)));
                                }
                                //	Update everything so we continue after this point
                                lastGoodNodeTokenIdx  = tokenIdx - 1;
                                lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                                currWordLookupNode    = wordLookupRoot;
                                isBuildingWord        = false;
                                //	Don't bother updating tokenIdx because we need to look at the word again.
                            }
//							else {
//								throw new RuntimeLexerSourceException("Unrecognized word or symbol.", tokens[tokenIdx-1]);
//							}
                        }
                        else
                        {
                            writePNode(new PNode(lastGoodNode.Value));
                            //	Reset everything so we're looking for a new word again.
                            lastGoodNode          = null;
                            currWordLookupNode    = wordLookupRoot;
                            isBuildingWord        = false;
                            lastGoodNodeTokenIdx  = tokenIdx;
                            lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                        }
                    }

                    //	Output a quadquote
                    writePNode(new PNode(runtime.Quadquote));
                    //	Toggle our quad-quote-state.
                    insideQuadquoteExpression = !insideQuadquoteExpression;
                    lastQuadquoteIdx          = tokenIdx;
                    lastProcessedTokenIdx     = tokenIdx;
                    //	Continue
                    tokenIdx++;
                    continue;
                }



                if (insideQuadquoteExpression)
                {
                    if (token.tokenType != LexerToken.TYPE.UNCLASSIFIED)
                    {
                        throw new RuntimeLexerFailure("Static Lexer Failed Token Classification.");
                    }

                    //
                    //	This code is essentially copied from the LexerToken.TYPE.UNCLASSIFIED block below.
                    //	The only major difference is that instead of throwing an exception we wrap unknown
                    //	text inside raw word objects.
                    //
                    isBuildingWord = true;
                    //	Try to continue the current word matching.
                    Trie <RawWord, Word> .Node nodeForThisRawWord = currWordLookupNode.getChildNode(token.rawWord);
                    //	If we can't continue this way...
                    if (nodeForThisRawWord == null)
                    {
                        //...then whatever our last good match was is the correct word.
                        if (lastGoodNode == null)
                        {
                            //	If there is no last good match, then take the raw words we've passed
                            //	and dump them all into raw word objects.
                            for (int i = lastProcessedTokenIdx + 1; i < tokenIdx; i++)
                            {
                                writePNode(new PNode(new RawWordObject(tokens[i].rawWord)));
                            }
                            lastProcessedTokenIdx = tokenIdx - 1;
                            //	Update everything so we continue after this point
                            //	Don't bother updating tokenIdx because we need to look at the word again.
                            //	Do update currWordLookupNode
                            currWordLookupNode = wordLookupRoot.getChildNode(token.rawWord);
                            //	If there's no node at all, we have to deal with it now
                            if (currWordLookupNode == null)
                            {
                                writePNode(new PNode(new RawWordObject(token.rawWord)));
                                lastGoodNodeTokenIdx  = tokenIdx;
                                isBuildingWord        = false;
                                currWordLookupNode    = wordLookupRoot;
                                lastProcessedTokenIdx = tokenIdx;
                                tokenIdx++;
                            }
                            else
                            {
                                isBuildingWord       = true;
                                lastGoodNodeTokenIdx = tokenIdx - 1;
                                tokenIdx++;
                            }
                            continue;
                        }

                        writePNode(new PNode(lastGoodNode.Value));
                        //	Reset everything so we're looking for a new word again.
                        lastGoodNode          = null;
                        currWordLookupNode    = wordLookupRoot;
                        isBuildingWord        = false;
                        lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                        //	Move the head back to the spot after the last token in the word
                        tokenIdx = lastGoodNodeTokenIdx + 1;
                        continue;
                    }

                    //	If adding this raw word makes a word, then record it as good
                    if (nodeForThisRawWord.Value != null)
                    {
                        lastGoodNode         = nodeForThisRawWord;
                        lastGoodNodeTokenIdx = tokenIdx;
                    }
                    currWordLookupNode = nodeForThisRawWord;
                    continue;
                }
                else
                {
                    switch (token.tokenType)
                    {
                    case LexerToken.TYPE.UNCLASSIFIED:
                    {
                        isBuildingWord = true;
                        //	Try to continue the current word matching.
                        Trie <RawWord, Word> .Node nodeForThisRawWord = currWordLookupNode.getChildNode(token.rawWord);
                        //	If we can't continue this way...
                        if (nodeForThisRawWord == null)
                        {
                            //...then whatever our last good match was is the correct word.
                            if (lastGoodNode == null)
                            {
                                //throw new RuntimeLexerSourceException("Unrecognized word or symbol.", token);
                                //	Dump everything into raw words.
                                tokenIdx++;                                     //	Include this word
                                for (int i = lastProcessedTokenIdx + 1; i < tokenIdx; i++)
                                {
                                    writePNode(new PNode(new RawWordObject(tokens[i].rawWord)));
                                }
                                //	Update everything so we continue after this point
                                lastGoodNodeTokenIdx  = tokenIdx - 1;
                                lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                                currWordLookupNode    = wordLookupRoot;
                                isBuildingWord        = false;
                                continue;
                            }
                            writePNode(new PNode(lastGoodNode.Value));
                            //	Reset everything so we're looking for a new word again.
                            lastGoodNode          = null;
                            currWordLookupNode    = wordLookupRoot;
                            isBuildingWord        = false;
                            lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                            //	Move the head back to the spot after the last token in the word
                            tokenIdx = lastGoodNodeTokenIdx + 1;
                            continue;
                        }

                        //	If adding this raw word makes a word, then record it as good
                        if (nodeForThisRawWord.Value != null)
                        {
                            lastGoodNode         = nodeForThisRawWord;
                            lastGoodNodeTokenIdx = tokenIdx;
                        }
                        currWordLookupNode = nodeForThisRawWord;
                        continue;
                    }
                    break;

                    case LexerToken.TYPE.STRING:
                    {
                        //	First clean up any word we may be building and write it to output.
                        if (isBuildingWord)
                        {
                            if (lastGoodNode == null || lastGoodNodeTokenIdx != tokenIdx - 1)
                            {
                                //throw new RuntimeLexerSourceException("Unrecognized word or symbol.", tokens[tokenIdx-1]);
                                //	Just take all the words up until now and dump them into raw words.
                                for (int i = lastProcessedTokenIdx + 1; i < tokenIdx; i++)
                                {
                                    writePNode(new PNode(new RawWordObject(tokens[i].rawWord)));
                                }
                                //	Update everything so we continue after this point
                                lastGoodNodeTokenIdx  = tokenIdx - 1;
                                lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                                currWordLookupNode    = wordLookupRoot;
                                isBuildingWord        = false;
                            }
                            else
                            {
                                writePNode(new PNode(lastGoodNode.Value));
                                //	Reset everything so we're looking for a new word again.
                                lastGoodNode          = null;
                                currWordLookupNode    = wordLookupRoot;
                                isBuildingWord        = false;
                                lastProcessedTokenIdx = lastGoodNodeTokenIdx;
                            }
                        }

                        //	Now write the string literal object to output
                        writePNode(new PNode(new StringLiteralObject(token.rawWord.AsString)));
                        lastProcessedTokenIdx = tokenIdx;
                        //	Continue
                        tokenIdx++;
                        continue;
                    }
                    break;
                    }
                }
            }


            finalCheckAfterParsing();
            return(outputRoot);
        }
Ejemplo n.º 29
0
 public void performAction(ProseRuntime runtime)
 {
     //runtime.StdOut.Write(writeMe);
 }
Ejemplo n.º 30
0
 public void performAction(ProseRuntime runtime)
 {
     Console.WriteLine("debugAction(" + who + ", " + what + ")");
 }
Ejemplo n.º 31
0
 public AssemblyNameWord(RawWord[] words, ProseRuntime runtime, Assembly assembly)
     : base(words)
 {
     this.assembly = assembly;
     isa           = new Word[] { runtime.word("@assembly") };
 }
Ejemplo n.º 32
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void onProgressReport(ProseRuntime runtime, PNode beginningOfFragment, PNode progressMark)
 {
     //debugOutput("- " + beginningOfFragment.getReadableStringWithProgressMark(progressMark));
     Console.BackgroundColor = ConsoleColor.Black;
     Console.ForegroundColor = ConsoleColor.Blue;
     Console.Write("progress>      ");
     writePrettyProseWithProgressMark(runtime, beginningOfFragment, progressMark, 0);
 }
Ejemplo n.º 33
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 //    Set which events are logged
 public static void SetShowEvent(ProseRuntime runtime, List<ProseObject> args)
 {
     setShowEvent(runtime, args);
 }
Ejemplo n.º 34
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
        //    Pass null to progress mark to eliminate
        static void writePrettyProseWithProgressMark(ProseRuntime runtime, PNode start, PNode progressMark, int maxNodesToProcess)
        {
            writeStackDepthMarker(runtime);

            //Stack<ProseObject> parenStack = new Stack<ProseObject>();
            int parenCount = 0;
            int bracketCount = 0;
            int quadQuoteCount = 0;
            int periodCount = 0;
            int nodesProcessed = 0;

            PNode p = start;
            do {
                nodesProcessed++;

                while (p != null && p.value == null) {
                    p = p.next;
                }

                if (p.value == null) {
                    p = p.next;
                    continue;
                }
                p = runtime.filterIncomingPNode(p);
                if (p == null)
                    break;

                //	PROGRESS MARK
                if (p == progressMark) {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.Write (" ");
                    Console.BackgroundColor = ConsoleColor.DarkBlue;
                    Console.Write (" ");
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.Write (" ");
                }

                //	Write a leading space
                Console.BackgroundColor = ConsoleColor.Black;
                Console.Write(" ");

                //	OBJECTS
                if (p.value is ProseAction) {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                else if (p.value == runtime.Comma		||
                         p.value == runtime.Semicolon	||
                         p.value == runtime.Period)
                {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Magenta;
                }
                else if (p.value is RawWordObject) {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                //				else if (	p.value == runtime.LefetParenthesis
                //				         ||	p.value == runtime.LeftSquareBracket
                //				         ||	p.value == runtime.LeftCurlyBracket
                //				         || p.value == runtime.RightParenthesis
                //				         || p.value == r
                else if (	p.value == runtime.Colon
                         ||	p.value == runtime.LeftArrow
                         || p.value == runtime.PlusColon
                         || p.value == runtime.MinusColon
                         || p.value == runtime.RightArrow
                         || p.value == runtime.ColonPlus
                         || p.value == runtime.ColonMinus
                         || p.value == runtime.Quadquote)
                {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Cyan;

                }
                else if (	p.value is AssemblyNameWord
                         ||	p.value is TypeNameWord
                         ||	p.value is MethodNameWord)
                {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }
                else
                {
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Gray;
                }

                //	Inside a text block everything is forced to white unless its in brackets
                //	Deal with different highighting inside of text expressions
                if (quadQuoteCount % 2 == 1) {
                    if (p.value == runtime.LeftSquareBracket) {
                        bracketCount++;
                    }

                    //	Neutralize colors of words that behave as text
                    if (bracketCount == 0) {
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.Cyan;
                    }

                    if (p.value == runtime.RightSquareBracket) {
                        bracketCount--;
                    }
                }

                if (	p.value == runtime.@break
                    ||	p.value is BreakPointObject)
                {
                    Console.BackgroundColor = ConsoleColor.White;
                    Console.ForegroundColor = ConsoleColor.Black;
                }

                //	Prewrite logic

                //	Write the output
                //

                Console.Write(p.value.getReadableString());
                //	Just so nothing too ugly can go wrong
                Console.BackgroundColor = ConsoleColor.Black;

                //	Postwrite logic

                if (		p.value == runtime.RightArrow
                    || p.value == runtime.ColonPlus
                    || p.value == runtime.ColonMinus)
                {
                    if (	Console.CursorLeft > 60
                        ||	Console.CursorLeft + 40 > Console.BufferWidth)
                    {
                        restoreConsoleColor();
                        Console.WriteLine();
                        Console.Write ("               ");
                        writeStackDepthMarker(runtime);
                        restoreConsoleColor();
                        Console.Write ("\t\t");
                    }
                }

                //
                //	Other exits
                //
                if (nodesProcessed == maxNodesToProcess)
                    break;

                //
                //	Keep track of parentheticals to know if we can quit
                //
                if (	p.value == runtime.LeftParenthesis
                    ||	p.value == runtime.LeftCurlyBracket
                    ||	p.value == runtime.LeftSquareBracket)
                {
                    parenCount++;
                    //parenStack.Push(p.value);
                }
                else if (	p.value == runtime.RightParenthesis
                         || p.value == runtime.RightCurlyBracket
                         ||	p.value == runtime.RightSquareBracket)
                {
                    parenCount--;
                }
                else if (p.value == runtime.Quadquote) {
                    quadQuoteCount++;
                }
                else if (	p.value == runtime.Period
                         && parenCount == 0
                         &&	quadQuoteCount % 2 == 0)
                {
                    periodCount++;
                    //	If parens and quadquotes are done and we have period then bail
                    if (periodCount == 2)
                        break;
                }

                //	Update
                p = p.next;
            } while (p != null);
            //outStr.Remove(outStr.Length - 1, 1);
            //return outStr.ToString();

            Console.WriteLine();
        }
Ejemplo n.º 35
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 public static void SwitchToNewRuntime(ProseRuntime runtime, List<ProseObject> args)
 {
     shouldGetNewREPLRuntime = true;
 }
Ejemplo n.º 36
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void writeStackDepthMarker(ProseRuntime runtime)
 {
     Console.BackgroundColor = ConsoleColor.Red;
     for (int i=0; i < runtime.CallDepth - 1; i++) {
         Console.Write("   ");
     }
 }
Ejemplo n.º 37
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 public static void WriteMethod(ProseRuntime runtime, List<ProseObject> args)
 {
     Console.BackgroundColor = ConsoleColor.Black;
     Console.ForegroundColor = ConsoleColor.Gray;
     Console.WriteLine(assembleArgumentsIntoString(args, "WriteMethod takes only string arguments."));
 }
Ejemplo n.º 38
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 public static void ExitREPL(ProseRuntime runtime, List<ProseObject> args)
 {
     shouldContinue = true;
 }
Ejemplo n.º 39
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void beforePerformingAction(ProseRuntime runtime, PNode source)
 {
     Console.BackgroundColor = ConsoleColor.Black;
     Console.ForegroundColor = ConsoleColor.Green;
     Console.Write("preaction>     ");
     writePrettyProseWithProgressMark(runtime, source, null, 1);
 }
Ejemplo n.º 40
0
 //    Overriding instructions:
 //    Return true if you want the runtime to make the standard breakpoint callback.
 //    Return false if you prefer to handle the event yourself in the body of onBreak()
 public bool onBreak(ProseRuntime runtime, PNode source, BreakPointObject.RuntimeData rtdata)
 {
     //	Handle the breakpoint in a non-standard way if you want
     //	by putting something in the body of this function.
     return true;
 }
Ejemplo n.º 41
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void beforeReduction(ProseRuntime runtime, PNode source)
 {
     Console.BackgroundColor = ConsoleColor.Black;
     Console.ForegroundColor = ConsoleColor.Gray;
     Console.Write("prereduction>  ");
     writePrettyProseWithProgressMark(runtime, source, null, 0);
 }
Ejemplo n.º 42
0
 public TypeNameWord(RawWord[] words, ProseRuntime runtime, Type type)
     : base(words)
 {
     this.type = type;
     isa       = new Word[] { runtime.word("@type") };
 }
Ejemplo n.º 43
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void onAmbiguity(ProseRuntime runtime, PNode source, List<PatternMatcher> matches)
 {
     Console.BackgroundColor = ConsoleColor.Yellow;
     Console.ForegroundColor = ConsoleColor.Black;
     Console.WriteLine("ambiguity> ");
     foreach (PatternMatcher match in matches)
     {
         foreach (Phrase phrase in match.MatchedPhrases) {
             Console.WriteLine(phrase.getReadableString());
         }
     }
 }
Ejemplo n.º 44
0
 //	Get a list of all words descending from this one.
 public List <ProseObject> getAllDescendents(ProseRuntime runtime)
 {
     return(internalGetAllDescendents(runtime.getNewTag()));
 }
Ejemplo n.º 45
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
 static void onParseSentence(ProseRuntime runtime, PNode source)
 {
     Console.BackgroundColor = ConsoleColor.Black;
     Console.ForegroundColor = ConsoleColor.Gray;
     Console.Write("postparse>     ");
     writePrettyProseWithProgressMark(runtime, source, null, 0);
 }
Ejemplo n.º 46
0
 //	Overriding instructions:
 //	Return true if you want the runtime to make the standard breakpoint callback.
 //	Return false if you prefer to handle the event yourself in the body of onBreak()
 public bool onBreak(ProseRuntime runtime, PNode source, BreakPointObject.RuntimeData rtdata)
 {
     //	Handle the breakpoint in a non-standard way if you want
     //	by putting something in the body of this function.
     return(true);
 }
Ejemplo n.º 47
0
 public void performAction(ProseRuntime runtime)
 {
     runtime.addPhraseAndDeleteExistingPhrases(phrase);
 }
        public override PNode evaluate(PNode evaluateMe, PatternMatcher successfulMatch)
        {
            PatternMatcher match = successfulMatch;

            //	Create the phrase represented by the user's code
            //	Extract the pattern from the match
            ProseObject[] pattern  = match.CurrPatternObject.Pattern;
            ProseObject[] argNames = match.CurrPatternObject.elementNames.ToArray();
            //	Create a value[] array for the new phrase
            ProseObject[] pvalue = match.getArgumentAsProseAtIndex(5).ToArray();
            //	Go through and make substitutions for the arguments
            PatternObject po = match.CurrPatternObject;

            for (int i = 0; i < po.Length; i++)
            {
                ProseObject argName = po.elementNames[i];
                if (argName == null)
                {
                    continue;
                }

                //	If we actually have an argument name, then scan through
                //	the value array and replace instances of that variable name
                //	with ArgRefObjects.
                for (int j = 0; j < pvalue.Length; j++)
                {
                    if (pvalue[j] == argName)
                    {
                        //	Replace this object with a reference to the pattern.
                        pvalue[j] = new ArgRefObject(i);
                    }
                }
            }

            //	Follow rules regarding , ; .
            //	1.	When matching these on the beginning or end of a pattern, they automatically
            //		generate ArgRefObjects on the beginning/end of the corresponding value. This
            //		means punctuation never gets downgraded.
            //	2.	Shouldn't allow stronger punctuation on the inside than on the outside, but
            //		this is a little tougher to check.
            ProseRuntime runtime = successfulMatch.Runtime;

            if (pattern[0] == runtime.Comma || pattern[0] == runtime.Semicolon)
            {
                //	Add a ref to the beginning
                ProseObject[] newValue = new ProseObject[pvalue.Length + 1];
                Array.Copy(pvalue, 0, newValue, 1, pvalue.Length);
                newValue[0] = new ArgRefObject(0);
                pvalue      = newValue;
            }
            int patternEnd = pattern.Length - 1;

            if (pattern[patternEnd] == runtime.Comma || pattern[patternEnd] == runtime.Semicolon)
            {
                //	Add a ref to the beginning
                ProseObject[] newValue = new ProseObject[pvalue.Length + 1];
                Array.Copy(pvalue, 0, newValue, 0, pvalue.Length);
                newValue[pvalue.Length] = new ArgRefObject(patternEnd);
                pvalue = newValue;
            }



            //	Create a simple phrase from these ingredients
            SimplePhrase newPhrase = new SimplePhrase(match.Matching[1].value, pattern, argNames, pvalue);

            //	Extract the "arguments" from the PatternMatcher.
            List <PNode> M = successfulMatch.Matching;                          //	The pattern -> prose index from the match

            value    = new ProseObject[3];
            value[0] = M[0].value;
            value[1] = new ExclusivePhraseBindingAction(newPhrase);
            value[2] = M[6].value;

            PNode ret = replaceWithValueAt(evaluateMe, successfulMatch);

            value = null;
            return(ret);
        }
Ejemplo n.º 49
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
        public static void onMatcherFailure(ProseRuntime runtime, PatternMatcher match)
        {
            restoreConsoleColor();
            StringBuilder str = new StringBuilder();
            ProseObject[] partialPattern = match.AssociatedPattern;
            foreach(ProseObject po in partialPattern) {
                str.Append(po.getReadableString());
                str.Append(" ");
            }
            if (str.Length != 0)
                str.Remove(str.Length-1, 1);

            Console.WriteLine("match fail>     " + str.ToString());
        }
Ejemplo n.º 50
0
Archivo: REPL.cs Proyecto: FizzyP/Prose
        public static void setShowEvent(ProseRuntime runtime, List<ProseObject> args)
        {
            if (args.Count != 2)
                throw new ArgumentException("SetShowEvent requires an event and a yes/no value.");

            string eventWord = args[0].getReadableString();
            string yesNoWord = args[1].getReadableString();

            //	PROGRESS REPORTS
            if (eventWord == "progress") {
                if (yesNoWord == "yes")	{
                    if (!showProgressReport) {
                        runtime.OnProgressReport += onProgressReportDelegate;
                        showProgressReport = true;
                    }
                }
                else {
                    runtime.OnProgressReport -= onProgressReportDelegate;
                    showProgressReport = false;
                }
            }

            //	POSTPARSE REPORT
            if (eventWord == "postparse") {
                if (yesNoWord == "yes")	{
                    if (!showParseSentenceReport) {
                        runtime.OnParseSentence += onParseSentenceDelegate;
                        showParseSentenceReport = true;
                    }
                }
                else {
                    runtime.OnParseSentence -= onParseSentenceDelegate;
                    showParseSentenceReport = false;
                }
            }

            //	POSTACTION REPORTS
            if (eventWord == "postaction") {
                if (yesNoWord == "yes")	{
                    if (!showAfterActionReport) {
                        runtime.AfterPerformingAction += afterPerformingActionDelegate;
                        showAfterActionReport = true;
                    }
                }
                else {
                    runtime.AfterPerformingAction -= afterPerformingActionDelegate;
                    showAfterActionReport = false;
                }
            }

            //	PREACTION REPORTS
            if (eventWord == "preaction") {
                if (yesNoWord == "yes")	{
                    if (!showBeforeActionReport) {
                        runtime.BeforePerformingAction += beforePerformingActionDelegate;
                        showBeforeActionReport = true;
                    }
                }
                else {
                    runtime.BeforePerformingAction -= beforePerformingActionDelegate;
                    showBeforeActionReport = false;
                }
            }

            //	PREREDUCTION REPORTS
            if (eventWord == "prereduction") {
                if (yesNoWord == "yes")	{
                    if (!showBeforeReductionReport) {
                        runtime.BeforeReduction += beforeReductionDelegate;
                        showBeforeReductionReport = true;
                    }
                }
                else {
                    runtime.BeforeReduction -= beforeReductionDelegate;
                    showBeforeReductionReport = false;
                }
            }

            //	POSTREDUCTION REPORTS
            if (eventWord == "postreduction") {
                if (yesNoWord == "yes")	{
                    if (!showAfterReductionReport) {
                        runtime.AfterReduction += afterReductionDelegate;
                        showAfterReductionReport = true;
                    }
                }
                else  {
                    runtime.AfterReduction -= afterReductionDelegate;
                    showAfterReductionReport = false;
                }
            }

            //	MATCH REPORTS
            if (eventWord == "matches") {
                if (yesNoWord == "yes")	{
                    if (!showOnMatchReport) {
                        runtime.OnMatch += onMatchDelegate;
                        showOnMatchReport = true;
                    }
                }
                else {
                    runtime.OnMatch -= onMatchDelegate;
                    showOnMatchReport = false;
                }
            }

            //	MATCHER FAILURE REPORTS
            if (eventWord == "matchfails") {
                if (yesNoWord == "yes")	{
                    if (!showOnMatcherFailureReport) {
                        runtime.OnMatcherFailure += onMatcherFailureDelegate;
                        showOnMatcherFailureReport = true;
                    }
                }
                else {
                    runtime.OnMatcherFailure -= onMatcherFailureDelegate;
                    showOnMatcherFailureReport = false;
                }
            }
        }
Ejemplo n.º 51
0
 public MethodNameWord(RawWord[] words, ProseRuntime runtime, ProseLanguage.ActionDelegate delegateMethod)
     : base(words)
 {
     this.delegateMethod = delegateMethod;
     isa = new Word[] { runtime.word("@method") };
 }