From 7532b7ece345a4b2bb15533583f140bbbcf66de0 Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Wed, 19 Dec 2018 14:34:44 +0800 Subject: [PATCH 01/11] change files name --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 274 +++++++++++++++++++++ CPlab2_LexicalAnalysis/result.txt | 66 +++++ CPlab2_LexicalAnalysis/test.cpp | 22 ++ 3 files changed, 362 insertions(+) create mode 100644 CPlab2_LexicalAnalysis/LexicalAnalysis.cpp create mode 100644 CPlab2_LexicalAnalysis/result.txt create mode 100644 CPlab2_LexicalAnalysis/test.cpp diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp new file mode 100644 index 0000000..f4360e7 --- /dev/null +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -0,0 +1,274 @@ +#include +#include +#include +#include +using namespace std; + +#define ID 15 +#define NUM 16 + +//存放处理后的字符串 +char tempstr[255] = {}; +//空格标志 +bool temp = false; +//临时数组 +char word[255] = {}; +//keyword关键字 +string keyword[9] = { + "Const", "Var", "if", "else", "then", + "while", "do", "begin", "end" +}; + +int keyword_num[9] = { + 1,2,3,4,5, + 6,7,8,9 +}; +//部分运算符,定界符等 +char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; +//对应的种码值 +int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; + +//判断是否为字母 +bool IsLetter(char ch) +{ + if ((ch >= 'a'&&ch <= 'z') || (ch >= 'A'&&ch <= 'Z')) + return true; + return false; +} + +//判断是否为数字 +bool IsDigit(char ch) +{ + if (ch >= '0'&&ch <= '9') + return true; + return false; +} + +//判断是否为定界符等 +int IsSymbol(char ch) +{ + for (int i = 0; i<9; i++) + { + if (ch == symbol[i]) + return i; + } + return -1; +} + +//判断是否为关键字 +int IsKeyword(string str) +{ + for (int i = 0; i<26; i++) + { + if (str == keyword[i]) + { + return i; + } + } + //不是关键字即为ID + return ID; +} + +//空格处理 +void HandleSpace(char a[]) +{ + int j = 0; + memset(word, 0, 255);//需要清空,不然可能残留上次的字符串 + temp = false; + for (int i = 0; i < strlen(a); i++) + { + + if (a[i] != ' ' && a[i] != '\t') + { + word[j++] = a[i]; + temp = false; + } + else + { + if (!temp && a[i] != '\t') + { + word[j++] = a[i]; + temp = true; + } + } + } +} + +//处理"//"注释 +void prePro() +{ + int j = 0; + memset(tempstr, 0, 255); + for (int i = 0; i < strlen(word); i++) + { + if (word[i] == '/' && word[i + 1] == '/') + { + while (i < strlen(word)) + { + i++; + } + } + + else { + tempstr[j++] = word[i]; + } + } +} + +void Scanner(char *str); + +int main() +{ + char instr[255] = {}; //接收输入字符串 + bool flag = false; //多行注释标志,false为未处于注释区域 + string Token;//存放字符串 + char *str = NULL;//存放每行的字符串 + char delims[] = " ";//分割标志 + freopen("test.cpp", "r", stdin); + freopen("result.txt", "w", stdout); + + printf("词法分析结果如下:\n"); + printf("******************************\n"); + + while ((gets_s(instr)) != NULL) + { + HandleSpace(instr); + prePro(); + + str = strtok(tempstr, delims);//分割字符串 + + while (str != NULL) + { + //头文件,宏定义 + if (*(str) == '#') + { + printf("#\n"); + break; + } + + Scanner(str); + + str = strtok(NULL, delims); + } + } + + return 0; +} + +void Scanner(char *str) { + bool flag = false; //多行注释标志,false为未处于注释区域 + string Token;//存放字符串 + int type = 0; + + for (int i = 0; i\n", Token.c_str(), type); + Token = ""; + } + + if (IsDigit(*(str + i)) && (!flag)) + { + while (IsDigit(*(str + i))) + { + Token += *(str + i); + i++; + } + type = NUM; + printf("< %s , %d >\n", Token.c_str(), type); + Token = ""; + } + + //<,<=,<> + if (*(str + i) == '<' && (!flag)) + { + if (*(str + i + 1) == '=') + { + type = 32; + printf("< %s , %d >\n", "<=", type); + } + if (*(str + i + 1) == '>') + { + type = 31; + printf("< %s , %d >\n", "<>", type); + } + else + { + type = 30; + printf("< %s , %d >\n", "<", type); + } + } + //>,>= + else if (*(str + i) == '>' && (!flag)) + { + if (*(str + i + 1) == '=') + { + type = 34; + printf("< %s , %d >\n", ">=", type); + } + else + { + type = 33; + printf("< %s , %d >\n", ">", type); + } + } + //=,== + else if (*(str + i) == '=' && (!flag)) + { + if (*(str + i + 1) == '=') + { + type = 36; + printf("< %s , %d >\n", "==", type); + } + else + { + type = 35; + printf("< %s , %d >\n", "=", type); + } + } + + //余下定界符等 + else if (IsSymbol(*(str + i)) != -1 && (!flag)) + { + int syb = symbol_num[IsSymbol(*(str + i))]; + type = syb; + printf("< %c , %d >\n", *(str + i), syb); + } + } +} + diff --git a/CPlab2_LexicalAnalysis/result.txt b/CPlab2_LexicalAnalysis/result.txt new file mode 100644 index 0000000..3d3d1ab --- /dev/null +++ b/CPlab2_LexicalAnalysis/result.txt @@ -0,0 +1,66 @@ +词法分析结果如下: +****************************** +# +< int , 15 > +< main , 15 > +< ( , 26 > +< ) , 27 > +< { , 28 > +< Const , 1 > +< const_a , 15 > +< = , 35 > +< 10 , 16 > +< ; , 25 > +< Var , 2 > +< var_b , 15 > +< = , 35 > +< 15 , 16 > +< ; , 25 > +< if , 3 > +< ( , 26 > +< const_a , 15 > +< > , 33 > +< 5 , 16 > +< ) , 27 > +< { , 28 > +< var_b , 15 > +< = , 35 > +< var_b , 15 > +< + , 21 > +< 1 , 16 > +< ; , 25 > +< } , 29 > +< else , 4 > +< var_b , 15 > +< = , 35 > +< var_b , 15 > +< - , 22 > +< 4 , 16 > +< ; , 25 > +< do , 7 > +< { , 28 > +< test , 15 > +< * , 23 > +< / , 24 > +< } , 29 > +< while , 6 > +< ( , 26 > +< var_b , 15 > +< > , 33 > +< 5 , 16 > +< ) , 27 > +< ; , 25 > +< a , 15 > +< b , 15 > +< c , 15 > +< = , 35 > +< 0 , 16 > +< ; , 25 > +< abc , 15 > +< = , 35 > +< 0 , 16 > +< ; , 25 > +< return , 15 > +< 0 , 16 > +< ; , 25 > +< } , 29 > diff --git a/CPlab2_LexicalAnalysis/test.cpp b/CPlab2_LexicalAnalysis/test.cpp new file mode 100644 index 0000000..0f721da --- /dev/null +++ b/CPlab2_LexicalAnalysis/test.cpp @@ -0,0 +1,22 @@ +#include +int main() +{ + //test + Const const_a = 10; + Var var_b = 15; + + if (const_a > 5){ + var_b = var_b + 1; + } + else + var_b = var_b - 4; + + do { + /* test */ + } while(var_b > 5); + + a, b, c = 0; + abc = 0; + + return 0; +} \ No newline at end of file From 6b27a70bebabfd134a7687d64f865c542864aa3f Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Wed, 19 Dec 2018 14:35:25 +0800 Subject: [PATCH 02/11] change all files name --- .../result.txt" | 66 ----- .../test.cpp" | 22 -- ...5\346\263\225\345\210\206\346\236\220.cpp" | 274 ------------------ .../RecursiveDescent.cpp | 0 .../result.txt | 0 .../test.cpp | 0 .../SyntaxAnalysis.cpp | 0 .../result.txt | 0 .../IntermediateCodeGen.cpp | 0 .../result.txt | 0 10 files changed, 362 deletions(-) delete mode 100644 "CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/result.txt" delete mode 100644 "CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/test.cpp" delete mode 100644 "CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/\350\257\215\346\263\225\345\210\206\346\236\220.cpp" rename "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220.cpp" => CPlab3_RecursiveDescent/RecursiveDescent.cpp (100%) rename "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/result.txt" => CPlab3_RecursiveDescent/result.txt (100%) rename "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/test.cpp" => CPlab3_RecursiveDescent/test.cpp (100%) rename "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/\350\257\255\346\263\225\345\210\206\346\236\220.cpp" => CPlab3_RecursiveDescent_2/SyntaxAnalysis.cpp (100%) rename "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/result.txt" => CPlab3_RecursiveDescent_2/result.txt (100%) rename "CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220.cpp" => CPlab6_IntermediateCodeGen/IntermediateCodeGen.cpp (100%) rename "CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/result.txt" => CPlab6_IntermediateCodeGen/result.txt (100%) diff --git "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/result.txt" "b/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/result.txt" deleted file mode 100644 index 3d3d1ab..0000000 --- "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/result.txt" +++ /dev/null @@ -1,66 +0,0 @@ -词法分析结果如下: -****************************** -# -< int , 15 > -< main , 15 > -< ( , 26 > -< ) , 27 > -< { , 28 > -< Const , 1 > -< const_a , 15 > -< = , 35 > -< 10 , 16 > -< ; , 25 > -< Var , 2 > -< var_b , 15 > -< = , 35 > -< 15 , 16 > -< ; , 25 > -< if , 3 > -< ( , 26 > -< const_a , 15 > -< > , 33 > -< 5 , 16 > -< ) , 27 > -< { , 28 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< + , 21 > -< 1 , 16 > -< ; , 25 > -< } , 29 > -< else , 4 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< - , 22 > -< 4 , 16 > -< ; , 25 > -< do , 7 > -< { , 28 > -< test , 15 > -< * , 23 > -< / , 24 > -< } , 29 > -< while , 6 > -< ( , 26 > -< var_b , 15 > -< > , 33 > -< 5 , 16 > -< ) , 27 > -< ; , 25 > -< a , 15 > -< b , 15 > -< c , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< abc , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< return , 15 > -< 0 , 16 > -< ; , 25 > -< } , 29 > diff --git "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/test.cpp" "b/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/test.cpp" deleted file mode 100644 index 0f721da..0000000 --- "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/test.cpp" +++ /dev/null @@ -1,22 +0,0 @@ -#include -int main() -{ - //test - Const const_a = 10; - Var var_b = 15; - - if (const_a > 5){ - var_b = var_b + 1; - } - else - var_b = var_b - 4; - - do { - /* test */ - } while(var_b > 5); - - a, b, c = 0; - abc = 0; - - return 0; -} \ No newline at end of file diff --git "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/\350\257\215\346\263\225\345\210\206\346\236\220.cpp" "b/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/\350\257\215\346\263\225\345\210\206\346\236\220.cpp" deleted file mode 100644 index f4360e7..0000000 --- "a/CPlab2_\350\257\215\346\263\225\345\210\206\346\236\220/\350\257\215\346\263\225\345\210\206\346\236\220.cpp" +++ /dev/null @@ -1,274 +0,0 @@ -#include -#include -#include -#include -using namespace std; - -#define ID 15 -#define NUM 16 - -//存放处理后的字符串 -char tempstr[255] = {}; -//空格标志 -bool temp = false; -//临时数组 -char word[255] = {}; -//keyword关键字 -string keyword[9] = { - "Const", "Var", "if", "else", "then", - "while", "do", "begin", "end" -}; - -int keyword_num[9] = { - 1,2,3,4,5, - 6,7,8,9 -}; -//部分运算符,定界符等 -char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; -//对应的种码值 -int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; - -//判断是否为字母 -bool IsLetter(char ch) -{ - if ((ch >= 'a'&&ch <= 'z') || (ch >= 'A'&&ch <= 'Z')) - return true; - return false; -} - -//判断是否为数字 -bool IsDigit(char ch) -{ - if (ch >= '0'&&ch <= '9') - return true; - return false; -} - -//判断是否为定界符等 -int IsSymbol(char ch) -{ - for (int i = 0; i<9; i++) - { - if (ch == symbol[i]) - return i; - } - return -1; -} - -//判断是否为关键字 -int IsKeyword(string str) -{ - for (int i = 0; i<26; i++) - { - if (str == keyword[i]) - { - return i; - } - } - //不是关键字即为ID - return ID; -} - -//空格处理 -void HandleSpace(char a[]) -{ - int j = 0; - memset(word, 0, 255);//需要清空,不然可能残留上次的字符串 - temp = false; - for (int i = 0; i < strlen(a); i++) - { - - if (a[i] != ' ' && a[i] != '\t') - { - word[j++] = a[i]; - temp = false; - } - else - { - if (!temp && a[i] != '\t') - { - word[j++] = a[i]; - temp = true; - } - } - } -} - -//处理"//"注释 -void prePro() -{ - int j = 0; - memset(tempstr, 0, 255); - for (int i = 0; i < strlen(word); i++) - { - if (word[i] == '/' && word[i + 1] == '/') - { - while (i < strlen(word)) - { - i++; - } - } - - else { - tempstr[j++] = word[i]; - } - } -} - -void Scanner(char *str); - -int main() -{ - char instr[255] = {}; //接收输入字符串 - bool flag = false; //多行注释标志,false为未处于注释区域 - string Token;//存放字符串 - char *str = NULL;//存放每行的字符串 - char delims[] = " ";//分割标志 - freopen("test.cpp", "r", stdin); - freopen("result.txt", "w", stdout); - - printf("词法分析结果如下:\n"); - printf("******************************\n"); - - while ((gets_s(instr)) != NULL) - { - HandleSpace(instr); - prePro(); - - str = strtok(tempstr, delims);//分割字符串 - - while (str != NULL) - { - //头文件,宏定义 - if (*(str) == '#') - { - printf("#\n"); - break; - } - - Scanner(str); - - str = strtok(NULL, delims); - } - } - - return 0; -} - -void Scanner(char *str) { - bool flag = false; //多行注释标志,false为未处于注释区域 - string Token;//存放字符串 - int type = 0; - - for (int i = 0; i\n", Token.c_str(), type); - Token = ""; - } - - if (IsDigit(*(str + i)) && (!flag)) - { - while (IsDigit(*(str + i))) - { - Token += *(str + i); - i++; - } - type = NUM; - printf("< %s , %d >\n", Token.c_str(), type); - Token = ""; - } - - //<,<=,<> - if (*(str + i) == '<' && (!flag)) - { - if (*(str + i + 1) == '=') - { - type = 32; - printf("< %s , %d >\n", "<=", type); - } - if (*(str + i + 1) == '>') - { - type = 31; - printf("< %s , %d >\n", "<>", type); - } - else - { - type = 30; - printf("< %s , %d >\n", "<", type); - } - } - //>,>= - else if (*(str + i) == '>' && (!flag)) - { - if (*(str + i + 1) == '=') - { - type = 34; - printf("< %s , %d >\n", ">=", type); - } - else - { - type = 33; - printf("< %s , %d >\n", ">", type); - } - } - //=,== - else if (*(str + i) == '=' && (!flag)) - { - if (*(str + i + 1) == '=') - { - type = 36; - printf("< %s , %d >\n", "==", type); - } - else - { - type = 35; - printf("< %s , %d >\n", "=", type); - } - } - - //余下定界符等 - else if (IsSymbol(*(str + i)) != -1 && (!flag)) - { - int syb = symbol_num[IsSymbol(*(str + i))]; - type = syb; - printf("< %c , %d >\n", *(str + i), syb); - } - } -} - diff --git "a/CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220.cpp" b/CPlab3_RecursiveDescent/RecursiveDescent.cpp similarity index 100% rename from "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220.cpp" rename to CPlab3_RecursiveDescent/RecursiveDescent.cpp diff --git "a/CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/result.txt" b/CPlab3_RecursiveDescent/result.txt similarity index 100% rename from "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/result.txt" rename to CPlab3_RecursiveDescent/result.txt diff --git "a/CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/test.cpp" b/CPlab3_RecursiveDescent/test.cpp similarity index 100% rename from "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220/test.cpp" rename to CPlab3_RecursiveDescent/test.cpp diff --git "a/CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/\350\257\255\346\263\225\345\210\206\346\236\220.cpp" b/CPlab3_RecursiveDescent_2/SyntaxAnalysis.cpp similarity index 100% rename from "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/\350\257\255\346\263\225\345\210\206\346\236\220.cpp" rename to CPlab3_RecursiveDescent_2/SyntaxAnalysis.cpp diff --git "a/CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/result.txt" b/CPlab3_RecursiveDescent_2/result.txt similarity index 100% rename from "CPlab3_\351\200\222\345\275\222\344\270\213\351\231\215\350\257\255\346\263\225\345\210\206\346\236\220_2/result.txt" rename to CPlab3_RecursiveDescent_2/result.txt diff --git "a/CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220.cpp" b/CPlab6_IntermediateCodeGen/IntermediateCodeGen.cpp similarity index 100% rename from "CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220.cpp" rename to CPlab6_IntermediateCodeGen/IntermediateCodeGen.cpp diff --git "a/CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/result.txt" b/CPlab6_IntermediateCodeGen/result.txt similarity index 100% rename from "CPlab6_\344\270\255\351\227\264\344\273\243\347\240\201\347\224\237\346\210\220/result.txt" rename to CPlab6_IntermediateCodeGen/result.txt From 68afdaaea1eb1e1e59c3c2e40f5e46748affe029 Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Thu, 20 Dec 2018 19:06:07 +0800 Subject: [PATCH 03/11] Change --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 21 ++++++++++++++++----- CPlab2_LexicalAnalysis/test.cpp | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index f4360e7..d6c4a80 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -27,11 +27,12 @@ int keyword_num[9] = { char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; //对应的种码值 int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; - +//错误命名 +string err_mess = ""; //判断是否为字母 bool IsLetter(char ch) { - if ((ch >= 'a'&&ch <= 'z') || (ch >= 'A'&&ch <= 'Z')) + if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) return true; return false; } @@ -130,7 +131,7 @@ int main() printf("词法分析结果如下:\n"); printf("******************************\n"); - while ((gets_s(instr)) != NULL) + while ((gets(instr)) != NULL) { HandleSpace(instr); prePro(); @@ -151,7 +152,9 @@ int main() str = strtok(NULL, delims); } } - + if(err_mess != "") { + cout< 5){ - var_b = var_b + 1; + 1var_b = var_b + 1; } else var_b = var_b - 4; @@ -15,7 +15,7 @@ int main() /* test */ } while(var_b > 5); - a, b, c = 0; + 6a, b, c = 0; abc = 0; return 0; From ad7715cf0fc8aee6f40ee60be85c6d266eabe273 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 20 Dec 2018 19:07:19 +0800 Subject: [PATCH 04/11] change --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 2 +- CPlab2_LexicalAnalysis/a.out | Bin 0 -> 19920 bytes CPlab2_LexicalAnalysis/result.txt | 132 ++++++++-------- CPlab3_RecursiveDescent/RecursiveDescent.cpp | 4 +- CPlab3_RecursiveDescent/a.out | Bin 0 -> 24680 bytes CPlab3_RecursiveDescent/result.txt | 156 +++++++++---------- 6 files changed, 147 insertions(+), 147 deletions(-) create mode 100755 CPlab2_LexicalAnalysis/a.out create mode 100755 CPlab3_RecursiveDescent/a.out diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index f4360e7..48255d4 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -130,7 +130,7 @@ int main() printf("词法分析结果如下:\n"); printf("******************************\n"); - while ((gets_s(instr)) != NULL) + while ((gets(instr)) != NULL) { HandleSpace(instr); prePro(); diff --git a/CPlab2_LexicalAnalysis/a.out b/CPlab2_LexicalAnalysis/a.out new file mode 100755 index 0000000000000000000000000000000000000000..d4c5fbcc66bad23b413b557ea5832adefe9864dc GIT binary patch literal 19920 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 literal 0 HcmV?d00001 diff --git a/CPlab2_LexicalAnalysis/result.txt b/CPlab2_LexicalAnalysis/result.txt index 3d3d1ab..92914fb 100644 --- a/CPlab2_LexicalAnalysis/result.txt +++ b/CPlab2_LexicalAnalysis/result.txt @@ -1,66 +1,66 @@ -词法分析结果如下: -****************************** -# -< int , 15 > -< main , 15 > -< ( , 26 > -< ) , 27 > -< { , 28 > -< Const , 1 > -< const_a , 15 > -< = , 35 > -< 10 , 16 > -< ; , 25 > -< Var , 2 > -< var_b , 15 > -< = , 35 > -< 15 , 16 > -< ; , 25 > -< if , 3 > -< ( , 26 > -< const_a , 15 > -< > , 33 > -< 5 , 16 > -< ) , 27 > -< { , 28 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< + , 21 > -< 1 , 16 > -< ; , 25 > -< } , 29 > -< else , 4 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< - , 22 > -< 4 , 16 > -< ; , 25 > -< do , 7 > -< { , 28 > -< test , 15 > -< * , 23 > -< / , 24 > -< } , 29 > -< while , 6 > -< ( , 26 > -< var_b , 15 > -< > , 33 > -< 5 , 16 > -< ) , 27 > -< ; , 25 > -< a , 15 > -< b , 15 > -< c , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< abc , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< return , 15 > -< 0 , 16 > -< ; , 25 > -< } , 29 > +词法分析结果如下: +****************************** +# +< int , 15 > +< main , 15 > +< ( , 26 > +< ) , 27 > +< { , 28 > +< Const , 1 > +< const_a , 15 > +< = , 35 > +< 10 , 16 > +< ; , 25 > +< Var , 2 > +< var_b , 15 > +< = , 35 > +< 15 , 16 > +< ; , 25 > +< if , 3 > +< ( , 26 > +< const_a , 15 > +< > , 33 > +< 5 , 16 > +< ) , 27 > +< { , 28 > +< var_b , 15 > +< = , 35 > +< var_b , 15 > +< + , 21 > +< 1 , 16 > +< ; , 25 > +< } , 29 > +< else , 4 > +< var_b , 15 > +< = , 35 > +< var_b , 15 > +< - , 22 > +< 4 , 16 > +< ; , 25 > +< do , 7 > +< { , 28 > +< test , 15 > +< * , 23 > +< / , 24 > +< } , 29 > +< while , 6 > +< ( , 26 > +< var_b , 15 > +< > , 33 > +< 5 , 16 > +< ) , 27 > +< ; , 25 > +< a , 15 > +< b , 15 > +< c , 15 > +< = , 35 > +< 0 , 16 > +< ; , 25 > +< abc , 15 > +< = , 35 > +< 0 , 16 > +< ; , 25 > +< return , 15 > +< 0 , 16 > +< ; , 25 > +< } , 29 > diff --git a/CPlab3_RecursiveDescent/RecursiveDescent.cpp b/CPlab3_RecursiveDescent/RecursiveDescent.cpp index d45b311..0073a4f 100644 --- a/CPlab3_RecursiveDescent/RecursiveDescent.cpp +++ b/CPlab3_RecursiveDescent/RecursiveDescent.cpp @@ -72,7 +72,7 @@ int main() printf("词法分析结果如下:\n"); printf("******************************\n"); - while ((gets_s(instr)) != NULL) + while ((gets(instr)) != NULL) { HandleSpace(instr); prePro(); @@ -692,4 +692,4 @@ void prePro() tempstr[j++] = word[i]; } } -} \ No newline at end of file +} diff --git a/CPlab3_RecursiveDescent/a.out b/CPlab3_RecursiveDescent/a.out new file mode 100755 index 0000000000000000000000000000000000000000..3fa1baa0c2d2a9c295149d2d8bbaa8f00bf7696c GIT binary patch literal 24680 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 bDflN}WZdNXNAugR{d{o)tirMYSlj - 2: < x , 15 > - 3: < = , 35 > - 4: < 8 , 16 > - 5: < , , 40 > - 6: < y , 15 > - 7: < = , 35 > - 8: < 7 , 16 > - 9: < ; , 25 > -10: < Var , 2 > -11: < a , 15 > -12: < , , 40 > -13: < b , 15 > -14: < , , 40 > -15: < c , 15 > -16: < ; , 25 > -17: < begin , 8 > -18: < a , 15 > -19: < = , 35 > -20: < b , 15 > -21: < + , 21 > -22: < x , 15 > -23: < ; , 25 > -24: < if , 3 > -25: < a , 15 > -26: < > , 33 > -27: < 0 , 16 > -28: < then , 5 > -29: < begin , 8 > -30: < c , 15 > -31: < = , 35 > -32: < y , 15 > -33: < - , 22 > -34: < 1 , 16 > -35: < a , 15 > -36: < = , 35 > -37: < a , 15 > -38: < + , 21 > -39: < 2 , 16 > -40: < ; , 25 > -41: < end , 9 > -42: < else , 4 > -43: < begin , 8 > -44: < c , 15 > -45: < = , 35 > -46: < a , 15 > -47: < + , 21 > -48: < y , 15 > -49: < ; , 25 > -50: < end , 9 > -51: < while , 6 > -52: < a , 15 > -53: < > , 33 > -54: < 0 , 16 > -55: < do , 7 > -56: < a , 15 > -57: < = , 35 > -58: < a , 15 > -59: < - , 22 > -60: < 1 , 16 > -61: < ; , 25 > -62: < end , 9 > - - -语法分析结果如下: -******************************** -Const define success! -Const define success! -Const description success! -Var define success! -Var define success! -Var define success! -Var description success! -******************************** -Parse Success! Congratulations! -******************************** +词法分析结果如下: +****************************** + 1: < Const , 1 > + 2: < x , 15 > + 3: < = , 35 > + 4: < 8 , 16 > + 5: < , , 40 > + 6: < y , 15 > + 7: < = , 35 > + 8: < 7 , 16 > + 9: < ; , 25 > +10: < Var , 2 > +11: < a , 15 > +12: < , , 40 > +13: < b , 15 > +14: < , , 40 > +15: < c , 15 > +16: < ; , 25 > +17: < begin , 8 > +18: < a , 15 > +19: < = , 35 > +20: < b , 15 > +21: < + , 21 > +22: < x , 15 > +23: < ; , 25 > +24: < if , 3 > +25: < a , 15 > +26: < > , 33 > +27: < 0 , 16 > +28: < then , 5 > +29: < begin , 8 > +30: < c , 15 > +31: < = , 35 > +32: < y , 15 > +33: < - , 22 > +34: < 1 , 16 > +35: < a , 15 > +36: < = , 35 > +37: < a , 15 > +38: < + , 21 > +39: < 2 , 16 > +40: < ; , 25 > +41: < end , 9 > +42: < else , 4 > +43: < begin , 8 > +44: < c , 15 > +45: < = , 35 > +46: < a , 15 > +47: < + , 21 > +48: < y , 15 > +49: < ; , 25 > +50: < end , 9 > +51: < while , 6 > +52: < a , 15 > +53: < > , 33 > +54: < 0 , 16 > +55: < do , 7 > +56: < a , 15 > +57: < = , 35 > +58: < a , 15 > +59: < - , 22 > +60: < 1 , 16 > +61: < ; , 25 > +62: < end , 9 > + + +语法分析结果如下: +******************************** +Const define success! +Const define success! +Const description success! +Var define success! +Var define success! +Var define success! +Var description success! +******************************** +Parse Success! Congratulations! +******************************** From e7ad59f0712cea4afdb15c6f78ee490f3a3b34b7 Mon Sep 17 00:00:00 2001 From: ubuntu Date: Thu, 20 Dec 2018 19:11:17 +0800 Subject: [PATCH 05/11] err lab2 --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 4 +- CPlab2_LexicalAnalysis/a.out | Bin 19920 -> 20744 bytes CPlab2_LexicalAnalysis/result.txt | 41 --------------------- 3 files changed, 2 insertions(+), 43 deletions(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index d6c4a80..90641e4 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -207,11 +207,11 @@ void Scanner(char *str) { if (IsDigit(*(str + i)) && (!flag)) { - if(IsLetter(*(str + i + 1)) { + if(IsLetter(*(str + i + 1))) { err_mess += *(str + 1); int tempIndex = 1; while(IsLetter(*(str + i + tempIndex))) { - err_mess += *(str + i + tempIndex)); + err_mess += *(str + i + tempIndex); } err_mess += "\n"; } diff --git a/CPlab2_LexicalAnalysis/a.out b/CPlab2_LexicalAnalysis/a.out index d4c5fbcc66bad23b413b557ea5832adefe9864dc..98526f848f6c1ceabf2ad7362a2037a7bd22a88f 100755 GIT binary patch literal 20744 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 literal 19920 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 diff --git a/CPlab2_LexicalAnalysis/result.txt b/CPlab2_LexicalAnalysis/result.txt index 92914fb..301a65b 100644 --- a/CPlab2_LexicalAnalysis/result.txt +++ b/CPlab2_LexicalAnalysis/result.txt @@ -23,44 +23,3 @@ < 5 , 16 > < ) , 27 > < { , 28 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< + , 21 > -< 1 , 16 > -< ; , 25 > -< } , 29 > -< else , 4 > -< var_b , 15 > -< = , 35 > -< var_b , 15 > -< - , 22 > -< 4 , 16 > -< ; , 25 > -< do , 7 > -< { , 28 > -< test , 15 > -< * , 23 > -< / , 24 > -< } , 29 > -< while , 6 > -< ( , 26 > -< var_b , 15 > -< > , 33 > -< 5 , 16 > -< ) , 27 > -< ; , 25 > -< a , 15 > -< b , 15 > -< c , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< abc , 15 > -< = , 35 > -< 0 , 16 > -< ; , 25 > -< return , 15 > -< 0 , 16 > -< ; , 25 > -< } , 29 > From bd3977802f4b2c38cbdac5f0118a887468ee8032 Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Thu, 20 Dec 2018 19:14:41 +0800 Subject: [PATCH 06/11] fix lab2 --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index 90641e4..edee37b 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -153,7 +153,7 @@ int main() } } if(err_mess != "") { - cout< Date: Thu, 20 Dec 2018 19:32:16 +0800 Subject: [PATCH 07/11] remove err --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index edee37b..30eb5c7 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -27,8 +27,6 @@ int keyword_num[9] = { char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; //对应的种码值 int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; -//错误命名 -string err_mess = ""; //判断是否为字母 bool IsLetter(char ch) { @@ -152,9 +150,7 @@ int main() str = strtok(NULL, delims); } } - if(err_mess != "") { - printf("%s", err_mess.c_str()); - } + return 0; } @@ -208,21 +204,23 @@ void Scanner(char *str) { if (IsDigit(*(str + i)) && (!flag)) { if(IsLetter(*(str + i + 1))) { - err_mess += *(str + 1); + Token += *(str + i); int tempIndex = 1; while(IsLetter(*(str + i + tempIndex))) { - err_mess += *(str + i + tempIndex); + Token += *(str + i + tempIndex); } - err_mess += "\n"; - } - while (IsDigit(*(str + i))) - { - Token += *(str + i); - i++; + printf("", Token.c_str()); + Token = ""; + } else { + while (IsDigit(*(str + i))) + { + Token += *(str + i); + i++; + } + type = NUM; + printf("< %s , %d >\n", Token.c_str(), type); + Token = ""; } - type = NUM; - printf("< %s , %d >\n", Token.c_str(), type); - Token = ""; } //<,<=,<> From e9b003b54e633e3f1fb03d07ba8336fc5acc6b84 Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Thu, 20 Dec 2018 19:47:38 +0800 Subject: [PATCH 08/11] handle wrong id --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 41 +++++++++++++--------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index 30eb5c7..c5e7e71 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -27,6 +27,8 @@ int keyword_num[9] = { char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; //对应的种码值 int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; +// 判断是否出错 +bool err_flag = false; //判断是否为字母 bool IsLetter(char ch) { @@ -146,9 +148,12 @@ int main() } Scanner(str); - + if (err_flag) { + break; + } str = strtok(NULL, delims); } + if(err_flag) break; } return 0; @@ -203,24 +208,28 @@ void Scanner(char *str) { if (IsDigit(*(str + i)) && (!flag)) { - if(IsLetter(*(str + i + 1))) { + + while (IsDigit(*(str + i))) + { Token += *(str + i); - int tempIndex = 1; - while(IsLetter(*(str + i + tempIndex))) { - Token += *(str + i + tempIndex); + if(IsLetter(*(str + i + 1))) { + int tempIndex = 1; + while(IsLetter(*(str + i + tempIndex))) { + Token += *(str + i + tempIndex); + tempIndex += 1; + } + printf("", Token.c_str()); + Token = ""; + err_flag = true; + break; } - printf("", Token.c_str()); - Token = ""; - } else { - while (IsDigit(*(str + i))) - { - Token += *(str + i); - i++; - } - type = NUM; - printf("< %s , %d >\n", Token.c_str(), type); - Token = ""; + i++; } + if (err_flag) break; + type = NUM; + printf("< %s , %d >\n", Token.c_str(), type); + Token = ""; + } //<,<=,<> From 78a25c8cc8d975fb8054568604bb0a2db0a07d62 Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Thu, 27 Dec 2018 18:35:36 +0800 Subject: [PATCH 09/11] reserve --- CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index c5e7e71..94db2a8 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -24,7 +24,7 @@ int keyword_num[9] = { 6,7,8,9 }; //部分运算符,定界符等 -char symbol[9] = { '+','-','*','/',';','(',')','{','}'}; +char symbol[9] = { '+', '-', '*', '/', ';', '(' ,')' ,'{' ,'}'}; //对应的种码值 int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; // 判断是否出错 From 3902ac5b8535ce4802d73d4b4915345debbe2b5d Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Fri, 4 Jan 2019 12:56:23 +0800 Subject: [PATCH 10/11] add new coede --- CPlab3_RecursiveDescent/RecursiveDescent.py | 91 +++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 CPlab3_RecursiveDescent/RecursiveDescent.py diff --git a/CPlab3_RecursiveDescent/RecursiveDescent.py b/CPlab3_RecursiveDescent/RecursiveDescent.py new file mode 100644 index 0000000..1287577 --- /dev/null +++ b/CPlab3_RecursiveDescent/RecursiveDescent.py @@ -0,0 +1,91 @@ +import re +import collections + +# Tokens +NUM = r'(?P\d+)' +PLUS = r'(?P\+)' +MINUS = r'(?P-)' +TIMES = r'(?P\*)' +DIVIDE = r'(?P/)' +LPAREN = r'(?P\()' +RPAREN = r'(?P\))' +WS = r'(?P\s+)' + +patern = re.compile('|'.join([NUM, PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN, WS])) + +Token = collections.namedtuple('Token', ['type', 'value']) + +def generate_tokens(text): + scanner = patern.scanner(text) + for m in iter(scanner.match, None): + tok = Token(m.lastgroup, m.group()) + if tok.type != 'WS': + yield tok + +class ExpressionParser: + + def parse(self, text): + self.tokens = generate_tokens(text) + self.tok = None + self.nexttok = None + self._advance() + return self.expr() + + def _advance(self): + self.tok, self.nexttok = self.nexttok, next(self.tokens, None) + + def _accept(self, toktype): + if self.nexttok and self.nexttok.type == toktype: + self._advance() + return True + else: + return False + + def _expect(self, toktype): + if not self._accept(toktype): + raise SyntaxError('Expected ' + toktype) + + # Grammer rules + # expression ::= term { ('+'|'-') term }* + # term ::= factor { '*'|'/' factor }* + # factor ::= NUM | (expr) + def expr(self): + "expression ::= term { ('+'|'-') term }*" + exprval = self.term() + while self._accept('PLUS') or self._accept('MINUX'): + op = self.tok.type + right = self.term() + if op == 'PLUS': + exprval += right + elif op == 'MINUS': + exprval -= right + return exprval + + def term(self): + "term ::= factor { '*'|'/' factor }*" + termval = self.factor() + while self._accept('TIMES') or self._accept('DIVIDE'): + op = self.tok.type + right = self.factor() + if op == 'TIMES': + termval *= right + elif op == 'DIVIDE': + termval /= right + return termval + + def factor(self): + "factor ::= NUM | (expr)" + if self._accept('NUM'): + return int(self.tok.value) + elif self._accept('LPAREN'): + exprval = self.expr() + self._expect('RPAREN') + return exprval + else: + raise SyntaxError('Expected NUMBER oe LPAREN') + + + +if __name__ == '__main__': + e = ExpressionParser() + print(e.parse('(3 + 4) * 5 + 6')) \ No newline at end of file From 587667c7652dc57ec4005a9b34ee814d1f88741f Mon Sep 17 00:00:00 2001 From: Gary_Yang Date: Fri, 4 Jan 2019 13:01:49 +0800 Subject: [PATCH 11/11] external code --- 1.txt | 2 + CPlab2_LexicalAnalysis/LexicalAnalysis.cpp | 51 ++++++----- CPlab2_LexicalAnalysis/LexicalAnalysis.py | 94 +++++++++++++++++++++ CPlab2_LexicalAnalysis/result.txt | 1 + CPlab2_LexicalAnalysis/test.cpp | 39 ++++----- CPlab2_LexicalAnalysis/test.py | 3 + ConsoleApplication1.cpp | Bin 0 -> 80144 bytes 7 files changed, 143 insertions(+), 47 deletions(-) create mode 100644 1.txt create mode 100644 CPlab2_LexicalAnalysis/LexicalAnalysis.py create mode 100644 CPlab2_LexicalAnalysis/test.py create mode 100644 ConsoleApplication1.cpp diff --git a/1.txt b/1.txt new file mode 100644 index 0000000..4e21609 --- /dev/null +++ b/1.txt @@ -0,0 +1,2 @@ +const x=8,y=7;var a,b,c;begin a=2*x;;b=a+x+y;;c=a+3*b;end +const x=8,y=7;var a,b,c;begin a=b+x;;if a>0 then begin c=y -1;;a=a+2;end else begin c=a+y;end;while a>0 do a=a-1;end diff --git a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp index 94db2a8..c8d9bb4 100644 --- a/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp +++ b/CPlab2_LexicalAnalysis/LexicalAnalysis.cpp @@ -7,13 +7,13 @@ using namespace std; #define ID 15 #define NUM 16 -//存放处理后的字符串 + char tempstr[255] = {}; -//空格标志 + bool temp = false; -//临时数组 + char word[255] = {}; -//keyword关键字 + string keyword[9] = { "Const", "Var", "if", "else", "then", "while", "do", "begin", "end" @@ -23,13 +23,13 @@ int keyword_num[9] = { 1,2,3,4,5, 6,7,8,9 }; -//部分运算符,定界符等 + char symbol[9] = { '+', '-', '*', '/', ';', '(' ,')' ,'{' ,'}'}; -//对应的种码值 + int symbol_num[9] = { 21,22,23,24,25,26,27,28,29 }; -// 判断是否出错 + bool err_flag = false; -//判断是否为字母 + bool IsLetter(char ch) { if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) @@ -37,7 +37,7 @@ bool IsLetter(char ch) return false; } -//判断是否为数字 + bool IsDigit(char ch) { if (ch >= '0'&&ch <= '9') @@ -45,7 +45,7 @@ bool IsDigit(char ch) return false; } -//判断是否为定界符等 + int IsSymbol(char ch) { for (int i = 0; i<9; i++) @@ -56,7 +56,7 @@ int IsSymbol(char ch) return -1; } -//判断是否为关键字 + int IsKeyword(string str) { for (int i = 0; i<26; i++) @@ -66,15 +66,15 @@ int IsKeyword(string str) return i; } } - //不是关键字即为ID + return ID; } -//空格处理 + void HandleSpace(char a[]) { int j = 0; - memset(word, 0, 255);//需要清空,不然可能残留上次的字符串 + memset(word, 0, 255); temp = false; for (int i = 0; i < strlen(a); i++) { @@ -95,7 +95,7 @@ void HandleSpace(char a[]) } } -//处理"//"注释 + void prePro() { int j = 0; @@ -120,11 +120,11 @@ void Scanner(char *str); int main() { - char instr[255] = {}; //接收输入字符串 - bool flag = false; //多行注释标志,false为未处于注释区域 - string Token;//存放字符串 - char *str = NULL;//存放每行的字符串 - char delims[] = " ";//分割标志 + char instr[255] = {}; + bool flag = false; + string Token; + char *str = NULL; + char delims[] = " "; freopen("test.cpp", "r", stdin); freopen("result.txt", "w", stdout); @@ -136,11 +136,11 @@ int main() HandleSpace(instr); prePro(); - str = strtok(tempstr, delims);//分割字符串 + str = strtok(tempstr, delims); while (str != NULL) { - //头文件,宏定义 + if (*(str) == '#') { printf("#\n"); @@ -160,8 +160,8 @@ int main() } void Scanner(char *str) { - bool flag = false; //多行注释标志,false为未处于注释区域 - string Token;//存放字符串 + bool flag = false; + string Token; int type = 0; for (int i = 0; i=', '<>', '<', '>', '='] + word_map = {key: i+1 for i, key in enumerate(KEY_WORDS)} + word_map.update({key: i+21 for i, key in enumerate(SYMBOLS)}) + def process(string): + word = '' + if ' ' in string: + for s in string.split(' '): + word += s + else: + word = string + if '//' in word: + return word.split('//')[0] + return word + + def have_keywords(word): + for keyword in KEY_WORDS: + if keyword in word: + return keyword + return None + + def have_symbol(word): + for sy in SYMBOLS: + if sy in word: + return sy + return None + + def is_alpha(ch): + return (ch >= 'a' and ch <= 'z') or (ch >= 'A' and ch <= 'Z') + + def is_digit(ch): + return ch >= '0' and ch <= '9' + + # def is_in_symbols(c): + # return c in SYMBOLS + + # def is_keywords(c): + # return c in KEY_WORDS + + + queue = [process(string)] + if '/*' in queue[0] or '*/' in queue[0]: + return + stop = False + while not stop: + changed = False + tempQueue = [] + for item in queue: + key = have_keywords(item) + sy = have_symbol(item) + if key and key != item: + changed = True + item1, item2 = item.split(key) + if item1: + tempQueue.append(item1) + tempQueue.append(key) + if item2: + tempQueue.append(item2) + continue + elif sy and sy != item: + changed = True + sp = item.split(sy) + for i, it in enumerate(sp): + if it: + tempQueue.append(it) + if i != len(sp) - 1: + tempQueue.append(sy) + + else: + tempQueue.append(item) + + if item == queue[-1] and not changed: + stop = True + queue = tempQueue.copy() + for item in queue: + if item in word_map: + print("<", item, ",", word_map[item],">") + else: + if item and is_alpha(item[0]): + print("<", item, ",", 15,">") + if item and is_digit(item[0]): + print("<", item, ",", 16,">") + +def main(): + with open('./test.cpp', 'r') as r_stream: + for line in r_stream: + if line: + if '\n' in line: + scan(line[0:-1]) + else: + scan(line) + +main() \ No newline at end of file diff --git a/CPlab2_LexicalAnalysis/result.txt b/CPlab2_LexicalAnalysis/result.txt index 301a65b..d183536 100644 --- a/CPlab2_LexicalAnalysis/result.txt +++ b/CPlab2_LexicalAnalysis/result.txt @@ -23,3 +23,4 @@ < 5 , 16 > < ) , 27 > < { , 28 > + \ No newline at end of file diff --git a/CPlab2_LexicalAnalysis/test.cpp b/CPlab2_LexicalAnalysis/test.cpp index bc3a7be..bde4f5e 100644 --- a/CPlab2_LexicalAnalysis/test.cpp +++ b/CPlab2_LexicalAnalysis/test.cpp @@ -1,22 +1,19 @@ -#include -int main() -{ - //test - Const const_a = 10; - Var var_b = 15; - - if (const_a > 5){ - 1var_b = var_b + 1; - } - else - var_b = var_b - 4; - - do { - /* test */ - } while(var_b > 5); - - 6a, b, c = 0; - abc = 0; +Const x=8,y=7; +Var a,b,c; +begin + a=b+x; - return 0; -} \ No newline at end of file + if a>0 + then + begin + c=y -; + a=a+2; + end + else + begi + c=a+y; + end + + while a>0 + do a=a-1; +end \ No newline at end of file diff --git a/CPlab2_LexicalAnalysis/test.py b/CPlab2_LexicalAnalysis/test.py new file mode 100644 index 0000000..b79b3da --- /dev/null +++ b/CPlab2_LexicalAnalysis/test.py @@ -0,0 +1,3 @@ +a = 'adsd;' +if 'adsd;' in a: + print('vfs') \ No newline at end of file diff --git a/ConsoleApplication1.cpp b/ConsoleApplication1.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5be67ec37539ab36d10134516126ef2479ce3af7 GIT binary patch literal 80144 zcmeHweT-elb>B@JsCtbRw?GlVCJ$kM;|ESV0 z!)|3H>iOOCetXW$ow@hEeQ&v3Nm#tyxA)GRIdi_xnYnY{|FZ{*2a1tmp?IOVUMv?^ zi(SRJVo`n`lB>Tod9?f0bNk2t=fp3Z*>>$GzWBzOmF1bIzB}=?#Xqo6K=e=5$5w?U29o#l>QK@oP z(R)T(O$k+}ORCIB-};u9q~%5FWn=6RSUSf2@{Kqx6*mO0nFO>8Lj6lJ=2_`=u6R*e zO$#2tc-w04OM>Nfxqe=LJk$lbc2=M+tit7Z7t6kn7oRN-C+9FLy*NsBhL8qG!eybx z4Z-c4e8aUAHQ4rww7KD0n3SQ#g%Tgg*h#_YvEs?%34x2>UAgkJa(%D-sI2ANpDK

_smn{gTE$*9-<QBW9g$gM9wX%sEI={)rMFH^ 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 literal 0 HcmV?d00001