예제 #1
0
파일: Lexer.cs 프로젝트: dlurton/Happy
        internal Lexer(SourceUnit unit, HappyLanguageContext languageContext)
        {
            _reader = new InputReader(unit);
            _errorCollector = new ErrorCollector(languageContext.ErrorSink);
            PushState(LexerMode.LexingStatement);

            _keywords["if"] = HappyTokenKind.KeywordIf;
            _keywords["else"] = HappyTokenKind.KeywordElse;
            _keywords["while"] = HappyTokenKind.KeywordWhile;
            _keywords["for"] = HappyTokenKind.KeywordFor;
            _keywords["in"] = HappyTokenKind.KeywordIn;
            _keywords["between"] = HappyTokenKind.KeywordBetween;
            _keywords["where"] = HappyTokenKind.KeywordWhere;
            _keywords["lookup"] = HappyTokenKind.KeywordLookup;
            _keywords["default"] = HappyTokenKind.KeywordDefault;
            _keywords["true"] = HappyTokenKind.LiteralBool;
            _keywords["false"] = HappyTokenKind.LiteralBool;
            _keywords["return"] = HappyTokenKind.KeywordReturn;
            _keywords["def"] = HappyTokenKind.KeywordDef;
            _keywords["null"] = HappyTokenKind.LiteralNull;
            _keywords["load"] = HappyTokenKind.KeywordLoad;
            _keywords["use"] = HappyTokenKind.KeywordUse;
            _keywords["new"] = HappyTokenKind.KeywordNew;
            _keywords["function"] = HappyTokenKind.KeywordFunction;
            _keywords["break"] = HappyTokenKind.KeywordBreak;
            _keywords["continue"] = HappyTokenKind.KeywordContinue;
            _keywords["switch"] = HappyTokenKind.KeywordSwitch;
            _keywords["case"] = HappyTokenKind.KeywordCase;
        }
예제 #2
0
파일: Parser.cs 프로젝트: dlurton/Happy
 public static Module ParseModule(SourceUnit sourceUnit, HappyLanguageContext languageContext)
 {
     Lexer lexer = new Lexer(sourceUnit, languageContext);
     Parser parser = new Parser(lexer, languageContext);
     Module retval = null;
     try
     {
         retval = parser.Parse();
     }
     catch(AbortParseException)
     {
         //Left blank intentionally because AbortParseExceptions should never
         //be allowed to bubble up to the caller.
     }
     catch(SyntaxErrorException)
     {
         //We actually want to allow this exception to propogate as-is back
         //to the caller.  This is needed because of the catch-all below
         throw;
     }
     catch(Exception e)
     {
         //All other exceptions are to be considered an internal error
         //We may not know the exact location of the error, but we'll just
         //take the next token out of the lexer to give *some* kind of
         //idea line might contain the error
         DebugAssert.IsNotNull(e);
         Token t = lexer.NextToken();
         throw new InternalSourceException(e, t.Location,
             "The parser threw an unhandled exception.  This is usually caused by a syntax error " +
             "in the script being parsed.  The error ocurred at or before the this locaiton.");
     }
     return retval;
 }
예제 #3
0
 public AstAnalyzer(HappyLanguageContext languageContext)
     : base(VisitorMode.VisitNodeAndChildren)
 {
     _languageContext = languageContext;
     _errorCollector = new ErrorCollector(languageContext.ErrorSink);
     _runtimeContextExp = Expression.Parameter(typeof(HappyRuntimeContext), RuntimeContextIdentifier);
     _globalScopeExp = this.PropertyOrFieldGet("Globals", _runtimeContextExp);
 }
예제 #4
0
        public void SetUp()
        {
            var configFile = Path.GetFullPath(Uri.UnescapeDataString(new Uri(typeof(TestFixtureBase).Assembly.CodeBase).AbsolutePath)) + ".config";
            Runtime = new ScriptRuntime(ScriptRuntimeSetup.ReadConfiguration(configFile));

            _output = new MemoryStream();
            _errorOutput = new MemoryStream();

            Runtime.IO.SetOutput(_output, Encoding.ASCII);
            Runtime.IO.SetErrorOutput(_errorOutput, Encoding.ASCII);

            Engine = Runtime.GetEngine("ht");

            LanguageContext = HostingHelpers.GetLanguageContext(Engine) as HappyLanguageContext;

            GlobalScope = Engine.CreateScope();

            Assert.IsNotNull(GlobalScope);
        }
예제 #5
0
 public HappyErrorSink(HappyLanguageContext languageContext)
 {
     _languageContext = languageContext;
 }
예제 #6
0
 public LocationScanner(HappyLanguageContext languageContext)
     : base(languageContext)
 {
 }
예제 #7
0
파일: Parser.cs 프로젝트: dlurton/Happy
 internal Parser(Lexer lexer, HappyLanguageContext languageContext)
 {
     _lexer = lexer;
     _errorCollector = new ErrorCollector(languageContext.ErrorSink);
 }