1 /******************************************************************************
2 *
3 * Copyright (C) 2006, The Gentee Group. All rights reserved.
4 * This file is part of the Gentee open source project <http://www.gentee.com>.
5 *
6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
8 * ACCEPTANCE OF THE AGREEMENT.
9 *
10 * operlist_h 31.03.2008 0.0.A.
11 *
12 * Author: Generated with 'operlist' program
13 *
14 * Summary: This file contains a list of the compiler's or VM's messages.
15 *
16 ******************************************************************************/
17
18 #ifndef _OPERLIST_
19 #define _OPERLIST_
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif // __cplusplus
24
25 #include "../common/types.h"
26
27 //Флаги операций для таблицы операций
28 #define OPF_NOP 0x1 //Не имеет кода операции
29 #define OPF_BINARY 0x2 //Бинарная операция
30 #define OPF_UNARY 0x4 //Унарная операция стоящая перед операндом
31 #define OPF_POST 0x8 //Унарная операция стоящая после операнда
32 #define OPF_UNDEF 0x10 //Операция не определена, следующая операция, для данного типа всегда должен стоять unary
33 #define OPF_RETUINT 0x20 //Операция будет возвращать uint
34 #define OPF_ADDNOT 0x40 //Данная операция разбивается на две - предыдущая операция и логическое НЕТ
35 #define OPF_OPEN 0x80 //Открывающая скобка
36 #define OPF_CLOSE 0x100 //Закрывающая скобка
37 #define OPF_LVALUE 0x200 //LValue операция
38
39
40 #define OPERCOUNT 65 //Количество операций
41
42 //Идентификаторы операций
43 enum {
44 OpAs, // 0x0 ""
45 OpFunc, // 0x1 ""
46 OpLine, // 0x2 ""
47 OpStrappend, // 0x3 "+="
48 OpStrtext, // 0x4 "@"
49 OpPlus, // 0x5 "+"
50 OpAdd, // 0x6 "+"
51 OpMinus, // 0x7 "-"
52 OpSub, // 0x8 "-"
53 OpLen, // 0x9 "*"
54 OpMul, // 0xA "*"
55 OpDiv, // 0xB "/"
56 OpMod, // 0xC "%"
57 OpBinnot, // 0xD "~"
58 OpLate, // 0xE "~"
59 OpAddr, // 0xF "&"
60 OpBinand, // 0x10 "&"
61 OpBinxor, // 0x11 "^"
62 OpBinor, // 0x12 "|"
63 OpLognot, // 0x13 "!"
64 OpLogand, // 0x14 "&&"
65 OpLogor, // 0x15 "||"
66 OpLeft, // 0x16 "<<"
67 OpRight, // 0x17 ">>"
68 OpIncleft, // 0x18 "++"
69 OpIncright, // 0x19 "_++"
70 OpDecleft, // 0x1A "--"
71 OpDecright, // 0x1B "_--"
72 OpSet, // 0x1C "="
73 OpAddset, // 0x1D "+="
74 OpSubset, // 0x1E "-="
75 OpMulset, // 0x1F "*="
76 OpDivset, // 0x20 "/="
77 OpModset, // 0x21 "%="
78 OpAndset, // 0x22 "&="
79 OpOrset, // 0x23 "|="
80 OpXorset, // 0x24 "^="
81 OpLeftset, // 0x25 "<<="
82 OpRightset, // 0x26 ">>="
83 OpComma, // 0x27 ","
84 OpWith, // 0x28 "."
85 OpPoint, // 0x29 "."
86 OpPtr, // 0x2A "->"
87 OpQuest, // 0x2B "?"
88 OpStrout, // 0x2C "@"
89 OpStradd, // 0x2D "@"
90 OpLbrack, // 0x2E "("
91 OpRbrack, // 0x2F ")"
92 OpLsqbrack, // 0x30 "["
93 OpRsqbrack, // 0x31 "]"
94 OpLcrbrack, // 0x32 "{"
95 OpRcrbrack, // 0x33 "}"
96 OpCollect, // 0x34 "%{"
97 OpEq, // 0x35 "=="
98 OpNoteq, // 0x36 "!="
99 OpGreater, // 0x37 ">"
100 OpLesseq, // 0x38 "<="
101 OpLess, // 0x39 "<"
102 OpGreateq, // 0x3A ">="
103 OpIgneq, // 0x3B "%=="
104 OpIgnnoteq, // 0x3C "%!="
105 OpIgngreater, // 0x3D "%>"
106 OpIgnlesseq, // 0x3E "%<="
107 OpIgnless, // 0x3F "%<"
108 OpIgngreateq, // 0x40 "%>="
109
110 };
111
112 //Структура для описания операций
113 typedef struct {
114 ubyte before; // Приоритет на входе в стэк операций
115 ubyte after; // Приоритет после вставки в стэк операций
116 ushort flgs; // Тип операции OPER_
117 } soper, * psoper;
118
119 extern const soper opers[];
120 extern const ubyte operlexlist[];
121 #ifdef __cplusplus
122 }
123 #endif // __cplusplus
124
125 #endif // _OPERLIST_
126