Exemple #1
0
 public ParsingContext(Parser parser)
 {
     this.Parser                  = parser;
     Language                     = Parser.Language;
     Culture                      = Language.Grammar.DefaultCulture;
     SharedParsingEventArgs       = new ParsingEventArgs(this);
     SharedValidateTokenEventArgs = new ValidateTokenEventArgs(this);
 }
Exemple #2
0
 public ParsingContext(Parser parser)
 {
     VsLineScanState              = new VsScannerStateMap();
     Parser                       = parser;
     Language                     = Parser.Language;
     Culture                      = Language.Grammar.DefaultCulture;
     SharedParsingEventArgs       = new ParsingEventArgs(this);
     SharedValidateTokenEventArgs = new ValidateTokenEventArgs(this);
 }
 public ParsingContext(Parser parser)
 {
     Parser = parser;
     Language = Parser.Language;
     Culture = Language.Grammar.DefaultCulture;
     //This might be a problem for multi-threading - if we have several contexts on parallel threads with different culture.
     //Resources.Culture is static property (this is not Irony's fault, this is auto-generated file).
     Resources.Culture = Culture;
     SharedParsingEventArgs = new ParsingEventArgs(this);
     SharedValidateTokenEventArgs = new ValidateTokenEventArgs(this);
 }
Exemple #4
0
 public ParsingContext(Parser parser)
 {
     this.Parser = parser;
     Language    = Parser.Language;
     Culture     = Language.Grammar.DefaultCulture;
     //This might be a problem for multi-threading - if we have several contexts on parallel threads with different culture.
     //Resources.Culture is static property (this is not Irony's fault, this is auto-generated file).
     Resources.Culture            = Culture;
     SharedParsingEventArgs       = new ParsingEventArgs(this);
     SharedValidateTokenEventArgs = new ValidateTokenEventArgs(this);
 }
Exemple #5
0
        bool IsNewlineExpected(ValidateTokenEventArgs validateTokenEventArgs)
        {
            // Here we check manually if a newline is used as a statement terminator
            // or if it can be skipped (e.g. after `if(exp)`
            // First we have some special cases:

            // detect param, elseif, and else keywords to make sure they aren't misinterpreted as a command
            foreach (var matchTuple in _terms_after_newline)
            {
                if (validateTokenEventArgs.Context.CurrentParserState.ExpectedTerminals.Contains(matchTuple.Item1) &&
                    matchTuple.Item2.IsMatch(validateTokenEventArgs.Context.Source.Text,
                                             validateTokenEventArgs.Context.Source.Position))
                {
                    return false;
                }
            }

            // Now the general case: When the parser has any matching rule witht the newline, it's expected.
            // Otherwise it's optional and we skip it.
            // Remember that `validateTokenEventArgs.Context.CurrentParserState` points in to the finite state machine
            // that Irony generates. `Actions` represents the valid transitions to new states. If this statement is
            // `true`, it means the grammar has a plan for what to do with that `new_line_character`.
            return validateTokenEventArgs.Context.CurrentParserState.Actions.ContainsKey(this.new_line_character);
        }
Exemple #6
0
 bool IsNewlineExpected(ValidateTokenEventArgs validateTokenEventArgs)
 {
     // Remember that `validateTokenEventArgs.Context.CurrentParserState` points in to the finite state machine
     // that Irony generates. `Actions` represents the valid transitions to new states. If this statement is
     // `true`, it means the grammar has a plan for what to do with that `new_line_character`.
     return validateTokenEventArgs.Context.CurrentParserState.Actions.ContainsKey(this.new_line_character);
 }
Exemple #7
0
 void label_ValidateToken(object sender, ValidateTokenEventArgs e) {
   //check that token starts at position 0
   if (e.Token.Location.Column > 0) //Column is 0-based
     e.RejectToken(); 
 }//constructor
Exemple #8
0
 //All numbers are treated as HEX initially; here we need to analyze suffix (if any) and convert the value
 void number_ValidateToken(object sender, ValidateTokenEventArgs e) {
   
 }