Mercurial > ~dholland > hg > ag > index.cgi
comparison anagram/agcore/token.h @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children | 607e3be6bad8 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:13d2b8934445 |
---|---|
1 /* | |
2 * AnaGram, A System for Syntax Directed Programming | |
3 * Copyright 1993-2002 Parsifal Software. All Rights Reserved. | |
4 * See the file COPYING for license and usage terms. | |
5 * | |
6 * token.h | |
7 */ | |
8 | |
9 #ifndef TOKEN_H | |
10 #define TOKEN_H | |
11 | |
12 #include "register.h" | |
13 class Rule; | |
14 | |
15 | |
16 struct token_number_map; | |
17 | |
18 class Token : public ObjectRegister<token_number_map> { | |
19 public: | |
20 Token() {} | |
21 Token(int x); | |
22 Token(const Token &t); | |
23 static Token create(); | |
24 static const int first; | |
25 static void reset(); | |
26 class Map; | |
27 friend class Map; | |
28 int isLeadingToken(const Token) const; | |
29 int isExpansionToken(const Token) const; | |
30 int isExpansionRule(const Rule) const; | |
31 Token leadingToken(int) const; | |
32 Token follower(int) const ; | |
33 Rule expansionRule(int) const; | |
34 Rule rule(int) const; | |
35 | |
36 class Map { | |
37 public: | |
38 token_number_map &operator [] (unsigned x); | |
39 }; | |
40 }; | |
41 | |
42 extern Token::Map map_token_number; | |
43 | |
44 #include "keyword.h" | |
45 #include "symbol.h" | |
46 #include "tree.h" | |
47 | |
48 struct token_number_map { | |
49 AgArray<Rule> ruleList; | |
50 AgArray<Token> followerList; | |
51 AgArray<Rule> expansionRuleList; | |
52 AgArray<Token> leadingTokenList; | |
53 //unsigned key; | |
54 Keyword key; | |
55 Symbol token_name; | |
56 ParseTree parse_tree; | |
57 unsigned | |
58 vp_prod_number, | |
59 value_type, | |
60 token_set_id, | |
61 part_number, | |
62 precedence_level; | |
63 unsigned sticky : 1; | |
64 unsigned zero_length_flag : 1; | |
65 unsigned non_terminal_flag : 1; | |
66 unsigned sem_det_flag : 1; | |
67 unsigned fine_structure: 1; | |
68 unsigned left_associative: 1; | |
69 unsigned right_associative: 1; | |
70 unsigned rp_arg: 1; | |
71 unsigned pure: 1; | |
72 unsigned junky: 1; | |
73 unsigned reserve: 1; | |
74 unsigned reserved_word: 1; | |
75 unsigned subgrammar: 1; | |
76 unsigned lexeme: 1; | |
77 unsigned lexical: 1; | |
78 unsigned immediate_action: 1; | |
79 unsigned operatorCandidate: 1; | |
80 unsigned disregard: 1; | |
81 | |
82 token_number_map(); | |
83 int operator < (const token_number_map &t) const { | |
84 return token_name < t.token_name; | |
85 } | |
86 }; | |
87 | |
88 #endif /* TOKEN_H */ |