~ubuntu-branches/ubuntu/maverick/aspectc++/maverick

« back to all changes in this revision

Viewing changes to Puma/src/scanner/CRecognizer.cc

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2008-04-10 17:40:52 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20080410174052-xdnsm7oi8hauyyf1
Tags: 1.0pre4~svn.20080409+dfsg-3
Fix another missing include, this time in Ag++/StdSystem.cc

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
#include "Puma/PreParser.h"
26
26
#include "Puma/CTokens.h"
27
27
#include "Puma/CWildcardTokens.h"
28
 
#include "Puma/CWhitespaceTokens.h"
29
28
#include "Puma/PreMacroOpTokens.h"
 
29
#include "Puma/CCommentTokens.h"
30
30
 
31
31
namespace Puma {
32
32
 
33
33
 
34
34
// Include generated scanner tables
35
 
#include "CStringTab.ot"
36
35
#include "PreDirectiveTab.ot"
37
36
#include "PreTokenTab.ot"
38
37
#include "CDirectiveTab.ot"
39
 
#include "CWhitespaceTab.ot"
40
38
#include "CWildcardTab.ot"
41
39
#include "CCoreTab.ot"
42
40
#include "CIdentifierTab.ot"
44
42
 
45
43
// Declaration of orange token recognizer objects
46
44
 
47
 
MappedOrangeRecognizer<CScanBuffer> CRecognizer::string_recognizer (
48
 
  CStringTabMap, CStringTabExprMap,
49
 
  CStringTabStart, CStringTabStates, 
50
 
  CStringTabNext, CStringTabControl, 
51
 
  sizeof (CStringTabNext) / sizeof (int));
52
 
   
53
45
MappedOrangeRecognizer<CScanBuffer> CRecognizer::pre_dir_recognizer (
54
46
  PreDirectiveTabMap, PreDirectiveTabExprMap,
55
47
  PreDirectiveTabStart, PreDirectiveTabStates, 
68
60
  CDirectiveTabControl, 
69
61
  sizeof (CDirectiveTabNext) / sizeof (int));
70
62
 
71
 
MappedOrangeRecognizer<CScanBuffer> CRecognizer::whitespace_recognizer (
72
 
  CWhitespaceTabMap, CWhitespaceTabExprMap, CWhitespaceTabStart, 
73
 
  CWhitespaceTabStates, CWhitespaceTabNext, CWhitespaceTabControl, 
74
 
  sizeof (CWhitespaceTabNext) / sizeof (int));
75
 
 
76
63
MappedOrangeRecognizer<CScanBuffer> CRecognizer::wildcard_recognizer (
77
64
  CWildcardTabMap, CWildcardTabExprMap, CWildcardTabStart, 
78
65
  CWildcardTabStates, CWildcardTabNext, CWildcardTabControl, 
91
78
// functions
92
79
 
93
80
 
94
 
void CRecognizer::setup (ScanBuffer &buffer) {
95
 
  scan_buffer.decorate (&buffer);
 
81
void CRecognizer::setup () {
96
82
  comment_recognizer.mode (CCommentRecognizer::NO_COMMENT);
97
 
  check_directive = true;
 
83
  directives = true;
98
84
  scan_mode = NORMAL;
99
 
  scan_buffer.reset ();
100
85
}
101
86
 
102
87
 
103
88
int CRecognizer::recognize (Lang &lang, int &expr, int &len) {
104
 
  int  result;
105
 
 
106
 
  if (scan_buffer.new_line ()) {
107
 
    scan_mode = NORMAL;
108
 
    check_directive = true;
109
 
  }
 
89
  int result;
110
90
 
111
91
  if ((result = comment_recognizer.recognize (&scan_buffer, expr, len)) != 0) { 
112
 
    lang = COMMENT;
 
92
    lang = (expr == TOK_WSPACE ? WHITE : COMMENT);
113
93
    return result;
114
94
  }
115
95
  scan_buffer.retry ();
116
96
 
117
 
  if (check_directive && ! macro_ops) {
118
 
    check_directive = false;
 
97
  if (directives && ! macro_ops) {
 
98
    directives = false;
119
99
    if ((result = pre_dir_recognizer.recognize (&scan_buffer, expr, len)) != 0) {
120
100
      if (result > 0) 
121
101
        scan_mode = IN_PRE_DIR;
133
113
    scan_buffer.retry ();
134
114
  }
135
115
 
136
 
  if ((result = whitespace_recognizer.recognize (&scan_buffer, expr, len)) != 0) {
137
 
    lang = WHITE;
138
 
    return result;
139
 
  }
140
 
  scan_buffer.retry ();
141
 
 
142
 
  if ((result = string_recognizer.recognize (&scan_buffer, expr, len)) != 0) {
143
 
    lang = STRING;
144
 
    return result;
145
 
  }
146
 
  scan_buffer.retry ();
147
 
 
148
116
  if (macro_ops || scan_mode == IN_PRE_DIR) {
149
117
    if ((result = pre_token_recognizer.recognize (&scan_buffer, expr, len)) != 0) {
150
118
      lang = PRE;
170
138
    // that makes it an identifier instead of a keyword
171
139
    scan_buffer.more (len);
172
140
    if (scan_buffer.state () == ScanBuffer::STATE_OK) {
173
 
      char next = scan_buffer.next ();
 
141
      char next = scan_buffer.lookahead ();
174
142
      if (isalnum ((int)next) || next == '_')
175
143
        result = 0;
176
 
      scan_buffer.more (len);
177
144
    }
178
145
    if (result &&
179
146
        ((expr <= TOK_LAST_AC && aspectc) ||