22#ifndef SCI_PARSER_VOCABULARY_H
23#define SCI_PARSER_VOCABULARY_H
25#include "common/str.h"
26#include "common/hashmap.h"
27#include "common/hash-str.h"
28#include "common/list.h"
31#include "sci/engine/vm_types.h"
47 VOCAB_RESOURCE_SELECTORS = 997,
49 VOCAB_RESOURCE_SCI0_MAIN_VOCAB = 0,
50 VOCAB_RESOURCE_SCUMM_LOC_VOCAB = 1,
51 VOCAB_RESOURCE_SCI0_PARSE_TREE_BRANCHES = 900,
52 VOCAB_RESOURCE_SCI0_SUFFIX_VOCAB = 901,
54 VOCAB_RESOURCE_SCI1_MAIN_VOCAB = 900,
55 VOCAB_RESOURCE_SCI1_PARSE_TREE_BRANCHES = 901,
56 VOCAB_RESOURCE_SCI1_SUFFIX_VOCAB = 902,
58 VOCAB_RESOURCE_ALT_INPUTS = 913
63 VOCAB_CLASS_PREPOSITION = 0x01,
64 VOCAB_CLASS_ARTICLE = 0x02,
65 VOCAB_CLASS_ADJECTIVE = 0x04,
66 VOCAB_CLASS_PRONOUN = 0x08,
67 VOCAB_CLASS_NOUN = 0x10,
68 VOCAB_CLASS_INDICATIVE_VERB = 0x20,
69 VOCAB_CLASS_ADVERB = 0x40,
70 VOCAB_CLASS_IMPERATIVE_VERB = 0x80
75 kParseOpeningParenthesis = 1,
76 kParseClosingParenthesis = 2,
81#define VOCAB_MAX_WORDLENGTH 256
84#define VOCAB_CLASS_ANYWORD 0xff
87#define VOCAB_MAGIC_NUMBER_GROUP 0xffd
88#define VOCAB_MAGIC_NOTHING_GROUP 0xffe
91#define VOCAB_TREE_NODES 500
93#define VOCAB_TREE_NODE_LAST_WORD_STORAGE 0x140
94#define VOCAB_TREE_NODE_COMPARE_TYPE 0x146
95#define VOCAB_TREE_NODE_COMPARE_GROUP 0x14d
96#define VOCAB_TREE_NODE_FORCE_STORAGE 0x154
98#define SAID_COMMA 0xf0
100#define SAID_SLASH 0xf2
101#define SAID_PARENO 0xf3
102#define SAID_PARENC 0xf4
103#define SAID_BRACKO 0xf5
104#define SAID_BRACKC 0xf6
105#define SAID_HASH 0xf7
108#define SAID_TERM 0xff
110#define SAID_FIRST SAID_COMMA
113#define SAID_FULL_MATCH 0xffff
114#define SAID_NO_MATCH 0xfffe
115#define SAID_PARTIAL_MATCH 0xfffd
117#define SAID_LONG(x) ((x) << 8)
158 const char *_replacement;
160 uint32 _replacementLength;
171 kParseTreeWordNode = 4,
172 kParseTreeLeafNode = 5,
173 kParseTreeBranchNode = 6
183enum VocabularyVersions {
311 uint getParserBranchesSize()
const {
return _parserBranches.size(); }
312 const parse_tree_branch_t &getParseTreeBranch(
int number)
const {
return _parserBranches[number]; }
330 void printParserNodes(
int num);
332 void dumpParseTree();
334 int parseNodes(
int *i,
int *pos,
int type,
int nr,
int argc,
const char **argv);
354 bool loadParserWords();
360 void loadTranslatedWords();
385 void freeRuleList(ParseRuleList *rule_list);
392 bool loadAltInputs();
397 void freeAltInputs();
400 VocabularyVersions _vocabVersion;
403 uint16 _resourceIdWords;
404 uint16 _resourceIdSuffixes;
405 uint16 _resourceIdBranches;
409 ParseRuleList *_parserRules;
415 struct PrefixMeaning {
416 unsigned char prefix;
420 int _pronounReference;
446int said(
const byte *spec,
bool verbose);
void clear()
Definition: array.h:321
void push_back(const T &element)
Definition: array.h:181
Definition: serializer.h:80
Definition: resource.h:327
Definition: vocabulary.h:188
int parseGNF(const ResultWordListList &words, bool verbose=false)
void lookupWord(ResultWordList &retval, const char *word, int word_len)
void clearSynonyms()
Definition: vocabulary.h:322
reg_t parser_event
Definition: vocabulary.h:427
bool lookupVerbPrefix(ResultWordListList &parent_retval, ResultWordList &retval, Common::String word, int word_len, Common::String prefix)
void printParserWords() const
void lookupWordPrefix(ResultWordListList &parent_retval, ResultWordList &retval, const char *word, int word_len)
bool storePronounReference()
void saveLoadWithSerializer(Common::Serializer &ser)
void debugDecipherSaidBlock(const SciSpan< const byte > &data)
bool parserIsValid
Definition: vocabulary.h:428
ParseTreeNode _parserNodes[500]
Definition: vocabulary.h:424
const char * getAnyWordFromGroup(int group)
void printSuffixes() const
void replacePronouns(ResultWordListList &words)
void synonymizeTokens(ResultWordListList &words)
ParseRuleList * buildGNF(bool verbose=false)
bool tokenizeString(ResultWordListList &retval, const char *sentence, char **error)
bool checkAltInput(Common::String &text, uint16 &cursorPos)
void addSynonym(synonym_t syn)
Definition: vocabulary.h:317
bool lookupSpecificPrefixWithMeaning(ResultWordListList &parent_retval, ResultWordList &retval, const char *word, int word_len, unsigned char prefix, const char *meaning)
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
Definition: algorithm.h:29
void vocab_dump_parse_tree(const char *tree_name, ParseTreeNode *nodes)
int said(const byte *spec, bool verbose)
Definition: vocabulary.h:176
ParseTypes type
Definition: vocabulary.h:177
ParseTreeNode * left
Definition: vocabulary.h:179
int value
Definition: vocabulary.h:178
ParseTreeNode * right
Definition: vocabulary.h:180
Definition: vocabulary.h:119
int _class
Definition: vocabulary.h:120
int _group
Definition: vocabulary.h:121
Definition: vocabulary.h:165
Definition: vm_types.h:39
Definition: vocabulary.h:132
int alt_suffix_length
Definition: vocabulary.h:137
int class_mask
Definition: vocabulary.h:134
const char * alt_suffix
Definition: vocabulary.h:140
int result_class
Definition: vocabulary.h:135
const char * word_suffix
Definition: vocabulary.h:141
int word_suffix_length
Definition: vocabulary.h:138
Definition: vocabulary.h:148
uint16 replaceant
Definition: vocabulary.h:149
uint16 replacement
Definition: vocabulary.h:150