• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

programming language


Commit MetaInfo

Revisióna2b669c27c059f4bf21f1aadb8b4d7105607cdd2 (tree)
Tiempo2023-02-03 23:28:24
Autordhrname <dhrname@joes...>
Commiterdhrname

Log Message

New LexicalAnalysis class

Cambiar Resumen

Diferencia incremental

Binary files a/bin/obj/main.o and b/bin/obj/main.o differ
--- a/include/parser.hpp
+++ b/include/parser.hpp
@@ -44,9 +44,83 @@ namespace jstr
4444 {
4545 using namespace std;
4646
47+ class LexicalAnalysis
48+ {
49+ public:
50+ LexicalAnalysis()
51+ {
52+ }
53+
54+ virtual ~LexicalAnalysis()
55+ {
56+ }
57+
58+ virtual FlexLexer* getLexer(const char* st);
59+ };
60+
61+ enum class ErrorCode
62+ {
63+ ERR_EQUALITY
64+ , ERR_NO_NUMBER_AFTER_EQUAL
65+ , ERR_NO_ID_NAME_AFTER_EQUAL
66+ , ERR_NO_ID_NAME_AFTER_FUNCTOR
67+ , ERR_NOT_FOUND_SEMICOLON_COLON
68+ , ERR_INVALID_SYMBOL_AFTER_CLASS
69+ , ERR_NO_STATEMENT
70+ , ERR_INVALID_SYMBOL_AFTER_BLOCKSTATEMENT
71+ , ERR_DOT
72+ , ERR_NOT_FOUND_SEMICOLON_STATEMENT
73+ , ERR_NOT_DECLARATION_ID_NAME
74+ , ERR_ASSIGNMENT_TO_CONSTANT_CLASS_NAME
75+ , ERR_NOT_FOUND_ASSIGN_SYMBOL
76+ };
77+
78+ /*Tester クラス
79+ * 文法エラーを処理するクラス
80+ * エラーが起きたとき、Don't panic rule (あわてない規則)を適用する*/
81+ class Tester: public LexicalAnalysis
82+ {
83+ public:
84+ std::vector<std::string> errorMessage;
85+ Tester()
86+ : errorMessage{
87+ "=の代わりに==を用いよ"
88+ , "=の後に数が来るべき"
89+ , "=の後に識別子の名前が来るべき"
90+ , "*.の後に識別子の名前が来るべき"
91+ , "セミコロン (;) かコンマ (,) が無い"
92+ , "クラス宣言の後に不正な記号がある"
93+ , "複合文があるはず"
94+ , "ブロック中の複合文の次に不正な記号がある"
95+ , "ピリオド (.)があるはず"
96+ , "複合文の間のセミコロン (;) が抜けている"
97+ , "識別子の名前がまだ宣言されていない"
98+ , "定数、またはクラス名への代入は許されない"
99+ , "代入演算子 (=) があるはず"
100+ , "callの後に識別子の名前が必要"
101+ , "定数、あるいは変数の呼び出しは意味が無い"
102+ , "コロン (:) があるはず"
103+ , "セミコロン (;) があるはず"
104+ , "doがあるはず"
105+ , "複合文の後に不正な記号がある"
106+ , "関係演算子があるはず"
107+ , "式に関手が含まれてはいけない"
108+ , "右かっこが抜けている"
109+ , "直前の因子の次にこの記号が続くのは不可能"
110+ , "式はこの記号で始まってはならない"
111+ , "この数は大きすぎる"
112+ }
113+ {
114+ }
115+
116+ virtual ~Tester()
117+ {
118+ }
119+ };
120+
47121 /*AbstractSyntaxTree クラス
48122 * 抽象構文木を表現するクラス*/
49- class AbstractSyntaxTree
123+ class AbstractSyntaxTree: public Tester
50124 {
51125 public:
52126 /*抽象構文木の現在ノード
@@ -296,12 +370,10 @@ namespace jstr
296370 /*declaration_list:
297371 INDENT
298372 declaration
299- LINEEND
300373 declaration_list
301374 | <ε>*/
302375 {INDENT
303376 , declaration
304- , LINEEND
305377 , declaration_list}
306378 ,{-1, 0, 0, 0, 0, 0, 0, 0, 0, 0}
307379 ,{}
@@ -391,6 +463,7 @@ namespace jstr
391463 IDENTIFIER
392464 name_list
393465 bee_constant
466+ LINEEND
394467 | DETACH
395468 LINEEND
396469 | CALL
@@ -404,7 +477,8 @@ namespace jstr
404477 {type_specifier
405478 , IDENTIFIER
406479 , name_list
407- , bee_constant}
480+ , bee_constant
481+ , LINEEND}
408482 ,{DETACH, LINEEND}
409483 ,{CALL, IDENTIFIER, LINEEND}
410484 ,{RESUME, IDENTIFIER, LINEEND}