コード例 #1
0
ファイル: Calculator.cs プロジェクト: Ivan091/Sharlin
 internal double Calculate()
 {
     LexicalAnalyzer = new LexicalAnalyzer(Input);
     RPNConverter    = new RPNConverter(LexicalAnalyzer.Analyse());
     RPNComputer     = new RPNComputer(RPNConverter.Convert());
     return(RPNComputer.Compute());
 }
コード例 #2
0
        protected static void Succeeds(IList <Element> input, IList <Element> expected)
        {
            var rpnConverter = new RPNConverter();

            rpnConverter.Convert(new List <Element>(input));

            var output = rpnConverter.Rpn;

            Assert.Equal(output.Count, expected.Count);

            for (var i = 0; i < output.Count; ++i)
            {
                Assert.Equal(output[i], expected[i]);
            }
        }
コード例 #3
0
ファイル: Compiler.cs プロジェクト: aki-null/epsilon-script
        public CompiledScript Compile(string source, Options options = Options.None,
                                      IDictionary <string, VariableValue> variables = null)
        {
            _rpnConverter.Reset();
            // Tokenization
            var tokens = _lexer.Analyze(source);

            // Parse
            _tokenParser.Parse(tokens);
            // Convert to RPN
            _rpnConverter.Convert(_tokenParser.Elements);
            // Build AST
            var rootNode = ASTBuilder.Build(_rpnConverter.Rpn, options, variables, _functions);

            // Optimize
            rootNode = rootNode.Optimize();
            // Create script wrapper
            return(new CompiledScript(rootNode));
        }
コード例 #4
0
        protected static void Fails(IList <Element> input)
        {
            var rpnConverter = new RPNConverter();

            Assert.Throws <ParserException>(() => { rpnConverter.Convert(new List <Element>(input)); });
        }