青岛商业网站建设,怎样做微信推广网站,一家做运动鞋的网站,免费的求职简历模板网站选择部分C语言的语法成分#xff0c;设计其词法语法语义分析程序。
设计并实现一个一遍扫描的词法语法语义分析程序#xff0c;将部分C语言的语法成分翻译成三地址代码#xff0c;要求有一定的出错提示和错误恢复功能。
例如简单赋值语句#xff1a;
area3.14*a*a;
s 2*…选择部分C语言的语法成分设计其词法语法语义分析程序。
设计并实现一个一遍扫描的词法语法语义分析程序将部分C语言的语法成分翻译成三地址代码要求有一定的出错提示和错误恢复功能。
例如简单赋值语句
area3.14*a*a;
s 2*3.1416*r*(hr);
翻译成后缀式
area 3.14 a * a *
s 2 3.1416 *r*h r *
翻译成三地址代码
t13.14*a;
t2t1*a;
areat2;
t32*3.1416;
t4t3*r;
t5hr;
t6t4*t5;
st6;
源程序
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CLanguage {class CLanguage {WordStream wordStream new WordStream(text.txt);// ListError errors new ListError();static void Main(string[] args) {CLanguage syntax new CLanguage();syntax.SemanticsParser();Console.ReadKey();}/// summary/// 语义分析/// /summarypublic void SemanticsParser() {do {functionParser();} while(wordStream.ReadNextWord().typeNum ! WordPicker.endTypeNumber);if(success) {// Console.WriteLine(成功);foreach(FourFormula f in list) {Console.WriteLine(f);}Console.WriteLine(---finish---);}}/// summary/// 函数/// /summaryprivate void functionParser() {Word word wordStream.ReadNextWord();//返回类型if(!KeyWords.isReturnType(word)) {addError(word, 返回值错误);}word wordStream.ReadNextWord();//函数名if(!isIdentifier(word)) {addError(word, 函数名错误);}//参数{word wordStream.ReadNextWord();if(word.typeNum ! Symbols.left_bracket.typeNum) {addError(word, (缺失);wordStream.retractWord();}arguments();word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_bracket.typeNum) {addError(word, )缺失);wordStream.retractWord();}word wordStream.ReadNextWord();if(word.typeNum ! Symbols.left_curly_bracket.typeNum) {addError(word, {缺失);wordStream.retractWord();}//语句串statementSequence();//}word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_curly_bracket.typeNum) {addError(word, }缺失);wordStream.retractWord();}}/// summary/// 参数/// /summaryprivate void arguments() {Word word wordStream.ReadNextWord();if(!KeyWords.isType(word)) {if(isIdentifier(word))addBeforeError(word, 参数类型缺失);else {if(wordStream.LastWord().typeNum Symbols.comma.typeNum)addBeforeError(word, ,多余);wordStream.retractWord();return;}}word wordStream.ReadNextWord();if(!isIdentifier(word)) {addBeforeError(word, 参数标识符错误);if(word.typeNum Symbols.right_bracket.typeNum) {wordStream.retractWord();return;}}//逗号word wordStream.ReadNextWord();if(word.typeNum Symbols.comma.typeNum) {arguments();}else if(word.typeNum Symbols.right_bracket.typeNum) {wordStream.retractWord();return;}}/// summary/// 判断是否是标识符/// /summary/// param nameword/param/// returns/returnsprivate bool isIdentifier(Word word) {return word.typeNum WordPicker.identifierTypeNumber;}/// summary/// 语串/// /summaryprivate void statementSequence() {Word word wordStream.ReadNextWord();while(word.typeNum ! Symbols.right_curly_bracket.typeNum word.typeNum ! WordPicker.endTypeNumber) {statement(word);word wordStream.ReadNextWord();}wordStream.retractWord();}/// summary/// 语句/// /summary/// param nameword/paramprivate void statement(Word word) {if(KeyWords.isType(word)) {defineStatement();}else if(isIdentifier(word)) {assignStatement();}else if(KeyWords.isIfCondition(word)) {ifCondition();}/*else if(KeyWords.isForLoop(word)) {forLoop();}*/else if(KeyWords.isWhileLoop(word)) {whileLoop();}else {addError(word, 多余);}}#region IF语句块/// summary/// if条件语句/// /summaryprivate void ifCondition() {//(Word word wordStream.ReadNextWord();if(word.typeNum ! Symbols.left_bracket.typeNum) {addError(word, (缺失);wordStream.retractWord();}ListFourFormula trueList new ListFourFormula();ListFourFormula falseList new ListFourFormula();condition(trueList, falseList);//)word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_bracket.typeNum) {addError(word, )缺失);wordStream.retractWord();}backPatch(trueList, getNextCodeLine());//回填true分支地址word wordStream.ReadNextWord();if(word.typeNum Symbols.left_curly_bracket.typeNum) {//语句块statementSequence();word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_curly_bracket.typeNum) {addBeforeError(word, 缺少右花括号);wordStream.retractWord();}}else {statement(word);}FourFormula faddFourFormula();//true分支结束跳转backPatch(falseList, getNextCodeLine());//回填false分支地址elseCondition();//else语句backPatch(f, getNextCodeLine());}/// summary/// else语句/// /summaryprivate void elseCondition() {Word word wordStream.ReadNextWord();if(word.typeNum ! KeyWords.ELSE.typeNum) {wordStream.retractWord();return;}word wordStream.ReadNextWord();if(word.typeNum Symbols.left_curly_bracket.typeNum) {statementSequence();word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_curly_bracket.typeNum) {addBeforeError(word, 缺少右花括号);wordStream.retractWord();}}else {statement(word);}}#endregion/// summary/// for循环/// /summaryprivate void forLoop() {}/// summary/// while循环/// /summaryprivate void whileLoop() {//(Word word wordStream.ReadNextWord();if(word.typeNum ! Symbols.left_bracket.typeNum) {addError(word, (缺失);wordStream.retractWord();}int startCode getNextCodeLine();ListFourFormula trueList new ListFourFormula();ListFourFormula falseList new ListFourFormula();condition(trueList, falseList);//)word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_bracket.typeNum) {addError(word, )缺失);wordStream.retractWord();}backPatch(trueList, getNextCodeLine());//回填true分支地址word wordStream.ReadNextWord();if(word.typeNum Symbols.left_curly_bracket.typeNum) {//语句块statementSequence();word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_curly_bracket.typeNum) {addBeforeError(word, 缺少右花括号);wordStream.retractWord();}}else {statement(word);}Word w new Word();w.word startCode;addFourFormula(w, null, null, null);backPatch(falseList, getNextCodeLine());}/// summary/// 条件语句/// /summaryprivate void condition(ListFourFormula trueList, ListFourFormula falseList) {boolExpressStatement(trueList, falseList);}/// summary/// 获取下一行地址编号/// /summary/// returns/returnsprivate int getNextCodeLine() {return list.Count;}/// summary/// 回填跳转位置/// /summary/// param namesize/paramprivate void backPatch(ListFourFormula indexs, int row) {foreach(FourFormula f in indexs) {f.result new Word();f.result.word row;// getNextLine();}indexs.Clear();}private void backPatch(FourFormula f, int row) {f.result new Word();f.result.word row;}/// summary/// 定义语句/// /summaryprivate void defineStatement() {Word word wordStream.ReadNextWord();if(!isIdentifier(word)) {addBeforeError(word, 变量名缺失);wordStream.retractWord();}word wordStream.ReadNextWord();if(word.typeNum Symbols.assign.typeNum) {addFourFormula(wordStream.LastWord(), expressStatement(), null, null);word wordStream.ReadNextWord();}if(word.typeNum Symbols.comma.typeNum) {defineStatement();}else if(word.typeNum ! Symbols.semicolon.typeNum) {addBeforeError(word, ;缺失);wordStream.retractWord();}}/// summary/// 赋值语句/// /summaryprivate void assignStatement() {Word result wordStream.NowWord();Word word wordStream.ReadNextWord();if(word.typeNum ! Symbols.assign.typeNum) {addBeforeError(word, 缺失);wordStream.retractWord();}Word arg1 expressStatement();addFourFormula(result, arg1, null, null);word wordStream.ReadNextWord();if(word.typeNum ! Symbols.semicolon.typeNum) {addBeforeError(word, ;缺失);wordStream.retractWord();}}#region 表达式解析/// summary/// 表达式/// /summaryprivate Word expressStatement() {Word express, arg1, arg2; arg1 express term(); Word word wordStream.ReadNextWord();while(word.typeNum Symbols.add.typeNum|| word.typeNum Symbols.sub.typeNum) {arg2 term();express createTempVar();express createTempVar();addFourFormula(express, arg1, arg2, word);arg1 express;word wordStream.ReadNextWord();}wordStream.retractWord();return express;}/// summary/// 项/// /summary/// returns/returnsprivate Word term() {Word term, arg1, arg2; term factor();arg1 term;Word word wordStream.ReadNextWord();while(word.typeNum Symbols.mul.typeNum|| word.typeNum Symbols.except.typeNum|| word.typeNum Symbols.remain.typeNum) {arg2 factor();term createTempVar();addFourFormula(term, arg1, arg2, word);arg1 term;word wordStream.ReadNextWord();}wordStream.retractWord();return term;}/// summary/// 表达式因子/// /summaryprivate Word factor() {Word factor null;Word word wordStream.ReadNextWord();if(isValue(word)) {factor word;}else if(word.typeNum Symbols.left_bracket.typeNum) {factor expressStatement();word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_bracket.typeNum) {addBeforeError(word, )缺失);wordStream.retractWord();}}else {addBeforeError(word, 表达式错误);wordStream.retractWord();//throw new Exception(); }return factor;}#endregion#region 布尔表达式/// summary/// 表达式/// /summaryprivate void boolExpressStatement(ListFourFormula trueList, ListFourFormula falseList) {boolTerm(trueList, falseList);Word word wordStream.ReadNextWord();while(word.typeNum Symbols.logic_or.typeNum) {backPatch(falseList, getNextCodeLine());boolTerm(trueList, falseList); word wordStream.ReadNextWord();}wordStream.retractWord();}/// summary/// 项/// /summary/// returns/returnsprivate void boolTerm(ListFourFormula trueList, ListFourFormula falseList) {boolFactor(trueList, falseList);Word word wordStream.ReadNextWord();while(word.typeNum Symbols.logic_and.typeNum) {backPatch(trueList, getNextCodeLine());boolFactor(trueList, falseList);word wordStream.ReadNextWord();}wordStream.retractWord();}/// summary/// 表达式因子/// /summaryprivate void boolFactor(ListFourFormula trueList, ListFourFormula falseList) {Word word wordStream.ReadNextWord();if(isValue(word)) {wordStream.retractWord();boolRelation(trueList,falseList); }else if(word.typeNum Symbols.left_bracket.typeNum) {if(isExpress()) {wordStream.retractWord();boolRelation(trueList, falseList);}else {boolExpressStatement(trueList, falseList);word wordStream.ReadNextWord();if(word.typeNum ! Symbols.right_bracket.typeNum) {addBeforeError(word, )缺失);wordStream.retractWord();}}}else if(word.typeNum Symbols.logic_not.typeNum) {boolExpressStatement(falseList,trueList);}else{addBeforeError(word, 布尔表达式错误);wordStream.retractWord();//throw new Exception(); }}private bool isExpress() {int left 1;int right 0;int words 1;Word word wordStream.ReadNextWord();while(Symbols.isExpressSymbol(word)) {if(word.typeNum Symbols.left_bracket.typeNum) {left;}else if(word.typeNum Symbols.right_bracket.typeNum) {right;}word wordStream.ReadNextWord();words;}wordStream.retractWord(words);return leftright;}/// summary/// 关系表达式或布尔值/// /summary/// param nametrueList/param/// param namefalseList/paramprivate void boolRelation(ListFourFormula trueList, ListFourFormula falseList) {Word word expressStatement();Word word2 null;Word op wordStream.ReadNextWord();if(Symbols.isCompareOperator(op)) {word2 expressStatement();if(word2 null) {return ;}}else{wordStream.retractWord();op new Word();} FourFormula f addFourFormula(null, word, word2, op);trueList.Add(f);f addFourFormula();falseList.Add(f);}#endregion/// summary/// 判断是否是数值变量类型/// /summary/// param nameword/param/// returns/returnsprivate bool isValue(Word word) {return word.typeNum WordPicker.numberTypeNumber|| word.typeNum WordPicker.identifierTypeNumber|| word.typeNum WordPicker.charTypeNumber|| word.typeNum WordPicker.stringTypeNumber;}#region 添加四元式ListFourFormula list new ListFourFormula();/// summary/// 保存四元式/// /summaryprivate FourFormula addFourFormula(Word result, Word arg1, Word arg2, Word op) {FourFormula fourFormula new FourFormula();fourFormula.result result;fourFormula.arg1 arg1;fourFormula.arg2 arg2;fourFormula.operate op;fourFormula.codeRow list.Count;list.Add(fourFormula);return fourFormula;}private FourFormula addFourFormula() {FourFormula fourFormula new FourFormula();fourFormula.codeRow list.Count;list.Add(fourFormula);return fourFormula;}#endregionint idNameCount 0;/// summary/// 创建临时变量/// /summary/// returns/returnspublic Word createTempVar() {Word word new Word();word.word $T idNameCount;word.typeNum WordPicker.tempValTypeNumber;return word;}#region 输出错误bool success true;//语法解析结果/// summary/// 输出在特定之前的错误/// /summary/// param nameword/param/// param namev/paramprivate void addBeforeError(Word word, string v) {success false;Console.WriteLine(error: word.ToPositionInfo() \t在该字之前 v);}/// summary/// 输出错误/// /summary/// param nameword/param/// param namev/paramprivate void addError(Word word, string v) {success false;Console.WriteLine(error: word.ToPositionInfo() \t v);}#endregion}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CLanguage {/// summary/// 四元式/// /summaryclass FourFormula {public int codeRow;public Word result;public Word arg1;public Word operate;public Word arg2;public override string ToString() {string s ( codeRow ) ;//赋值if(result.typeNum0) {s s result.word arg1.word;if(operate ! null) {s operate.word;}if(arg2 ! null) {s arg2.word;}}else if(operate null) {//直接跳转s goto ( result.word );}else {//条件跳转s s if arg1.word;if(operate.word!null) {s operate.word arg2.word;}s goto ( result.word );}return s;}}}using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;namespace CLanguage {/// summary/// 词/// /summaryclass Word {public int typeNum0;public string word;public int col0;public int row0;public override string ToString() {return ( typeNum , word );}public string ToPositionInfo() {return 行:(row1)\t列:col\t码:typeNum \t字: word;}}class WordPicker {string[] input;//int input_index 0;int row 0;int col 0;char character;/// summary/// 操作符表/// /summary string[] operatorSort null;public static int identifierTypeNumber; //变量名类型public static int numberTypeNumber; //数值类型public static int charTypeNumber; //字符类型public static int stringTypeNumber; //字符串类型public static int endTypeNumber -1; //结束符类型public static int errorTypeNumber -2; //出错类型public static int noDefine -3; //未定义类型public static char nullChar \0;public static int tempValTypeNumber; //临时变量类型public WordPicker(string file) {input File.ReadAllLines(file); identifierTypeNumber KeyWords.keyWordTable.Length1;numberTypeNumber KeyWords.keyWordTable.Length 2;charTypeNumber KeyWords.keyWordTable.Length 3;stringTypeNumber KeyWords.keyWordTable.Length 4;tempValTypeNumber KeyWords.keyWordTable.Length 5;operatorSort new string[Symbols.operatorTable.Length];Array.Copy(Symbols.operatorTable, operatorSort, Symbols.operatorTable.Length);Array.Sort(operatorSort);Array.Reverse(operatorSort);}/// summary/// 读词/// /summary/// returns/returnspublic Word Scanner() {Word myWord; read();readValidChar();//标识符if(char.IsLetter(character)) {myWordreadWord();}//数值else if(char.IsDigit(character)) {myWord readDigit();}//字符常量else if(character \) {myWord readConstChar();}//字符串else if(character \) {myWord readConstString();}/*//结束符else if(character endChar) {myWord.word endChar;myWord.typeNum endTypeNumber;}*///空值else if(character nullChar) {myWord new Word();myWord.row row;myWord.col col;myWord.word Ending;myWord.typeNum endTypeNumber;}//其他字符else {myWord readOtherChar();}return myWord;}/// summary/// 标识符/// /summary/// param namemyWord/paramprivate Word readWord() {Word myWord new Word();myWord.row row;myWord.col col;while(char.IsLetter(character) || char.IsDigit(character)) {myWord.word character;read();}retract();myWord.typeNum KeyWords.getTypeNumber(myWord.word);return myWord;}/// summary/// 其他字符/// /summary/// param namemyWord/paramprivate Word readOtherChar() {Word myWord new Word();myWord.row row;myWord.col col;string s character;for(int i 0; i 2; i) {read();if(character nullChar) {break;}s character;}foreach(string op in operatorSort) {if(s.StartsWith(op)) {retract(s.Length - op.Length);s op;break;}}myWord.word s;myWord.typeNum Symbols.getTypeNumber(myWord.word);return myWord;}/// summary/// 识别数字常量/// /summary/// param namemyWord/paramprivate Word readDigit() {Word myWord new Word();myWord.row row;myWord.col col;while(char.IsDigit(character)) {myWord.word character;read();}if(character .) {myWord.word character;read();while(char.IsDigit(character)) {myWord.word character;read();}}retract();myWord.typeNum numberTypeNumber;return myWord;}/// summary/// 识别字符常量/// /summary/// param namemyWord/paramprivate Word readConstChar() {Word myWord new Word();myWord.row row;myWord.col col;// myWord.word character;read();//读取直到\结束while(character ! \) {myWord.word character;read();//读到空字符或结束字符if(character nullChar /*|| character endChar*/|| char.IsControl(character)) {/* if(character endChar) {myWord.word endChar;} */myWord.typeNum errorTypeNumber;return myWord;}}// myWord.word character;Match r Regex.Match(myWord.word, ^(\\\\([0-7]{1,3}|x[0-9a-fA-F]|[abfnrtv\\\\\\?])|[^\\\\])$);//转义字符模式匹配if(!r.Success) {myWord.typeNum errorTypeNumber;return myWord;}myWord.typeNum charTypeNumber;return myWord;}/// summary/// 识别常量字符串/// /summary/// param namemyWord/paramprivate Word readConstString() {Word myWord new Word();myWord.row row;myWord.col col;// myWord.word character;read();while(character ! \) {myWord.word character;read();//读到空字符或结束字符if(character nullChar || char.IsControl(character)) {// myWord.word 0;myWord.typeNum errorTypeNumber;return myWord;}}// myWord.word character;//转义字符模式匹配if(!isLegalString(myWord.word)) {myWord.typeNum errorTypeNumber;return myWord;}myWord.typeNum stringTypeNumber;return myWord;}/// summary/// 合法字符串书写/// /summary/// param nameword/param/// returns/returnsprivate bool isLegalString(string word) {int i 0;while(i word.Length) {if(word[i] \\) {if(i word.Length)return false;foreach(char c in translateChar) {if(c word[i]) {goto aLabel;}}return false;}aLabel:i;}return true;}const string translateChar abfnrtv\\\\?;const string realChar \a\b\f\n\r\t\v\\\\?;/// summary/// 转换为真实字符串/// /summary/// param nameword/param/// returns/returnsprivate string toRealString(string word) {string res ;int index;for(int i 0; i word.Length; i) {if(word[i] \\) {if(i word.Length)throw new Exception(字符串以\\结尾异常);index translateChar.IndexOf(word[i]);if(index -1)throw new Exception(\\ word[i] 解析异常);res realChar[index];}else {res word[i];}}return res;}/// summary/// 读一个字符/// /summaryvoid read() {if(input.Length row|| input.Length row1 input[input.Length-1].Lengthcol) {character \0;}else {if(col input[row].Length) {col 0;row;}character input[row][col];col;}}/// summary/// 去除无效字符/// /summaryvoid readValidChar() {while(char.IsWhiteSpace(character)) {if(character \0) {return;}read(); }//判断注释if(character / input[row].Length col) {ignoreNote();}}/// summary/// 忽视注解/// /summaryprivate void ignoreNote() {read();//注释‘//’if(character /) {row;col 0; read();readValidChar();}//注释‘/*。。。*/’else if(character *) {read();if(character \0) {return;}char c;while(true) {c character;read();if(* c / character) {read();readValidChar();return;}if(character \0) {return;} }}else {retract();}}/// summary/// 回退一个字符/// /summaryvoid retract() { colcol-2;checkCol();read();}/// summary/// 回退v个字符/// /summary/// param namev/paramprivate void retract(int v) {if(v 0)return;col col - v - 1;checkCol();read();}/// summary/// 检查col是否合法/// /summaryvoid checkCol() {if(col 0) {row--;col input[row].Length col;checkCol();}}}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace CLanguage {class KeyWords {/// summary/// 关键字表/// /summarypublic static string[] keyWordTable {auto,break,case, char,const,continue,default,do,double,else,enum,extern,float,for,goto,if, int,long, register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while};public static Word AUTO, BREAK, CASE, CHAR, CONST,CONTINUE, DEFAULT, DO, DOUBLE,ELSE, ENUM, EXTERN, FLOAT, FOR,GOTO, IF, INT, LONG, REGISTER,RETURN, SHORT, SIGNED, SIZEOF, STATIC,STRUCT, SWITCH, TYPEDEF, UNION, UNSIGNED,VOID, VOLATILE, WHILE;static KeyWords() {Type t typeof(KeyWords);FieldInfo[] fields t.GetFields();Word word;foreach(FieldInfo f in fields)if(f.FieldType.Equals(typeof(Word))) {word new Word();word.word f.Name.ToLower();word.typeNum getTypeNumber(word.word);f.SetValue(t, word);}}/// summary/// 获取关键字编码/// /summary/// returns/returnspublic static int getTypeNumber(string s) {for(int i 0; i keyWordTable.Length; i) {if(keyWordTable[i] s) {return i1;}}return WordPicker.identifierTypeNumber;}public static bool isPrefType(Word w) {return SIGNED.typeNum w.typeNum|| UNSIGNED.typeNum w.typeNum;}public static bool isType(Word w) {return INT.typeNum w.typeNum|| CHAR.typeNum w.typeNum|| DOUBLE.typeNum w.typeNum|| FLOAT.typeNum w.typeNum|| SHORT.typeNum w.typeNum; }public static bool isReturnType(Word w) {return isType(w) || VOID.typeNum w.typeNum;}internal static bool isIfCondition(Word word) {return word.typeNum IF.typeNum;}internal static bool isForLoop(Word word) {return word.typeNum FOR.typeNum;}internal static bool isWhileLoop(Word word) {return word.typeNum WHILE.typeNum;}internal static bool isDoLoop(Word word) {return word.typeNum DO.typeNum;}internal static bool isKeyWord(Word word) {return word.typeNum 0 word.typeNum keyWordTable.Length;}}class Symbols {public static string[] operatorTable {{,},[,],(,),-,.,,--,!,,||,~,,|,^,,-,*,/,%,,,,,,,,!,?,:,,,;,,,-,*,/,%,,^,|,,};public static Word left_curly_bracket, right_curly_bracket,left_square_bracket, right_square_bracket,left_bracket, right_bracket,arrow, point, two_add, two_sub,logic_not, logic_and, logic_or,bitwise_not, bitwise_and, bitwise_or, bitwise_xor,add, sub, mul, except, remain,left_move, right_move,less, greater, greater_equal, less_equal,equal, not_equal, question_mark, colon, comma, semicolon,assign, add_assign, sub_assign, mul_assign, except_assign, remain_assign,and_assign, xor_assign, or_assign, left_move_assign, right_move_assign;internal static bool isSemicolo(Word word) {return word .typeNum semicolon.typeNum;}static Symbols() {Type t typeof(Symbols);FieldInfo[] fields t.GetFields();Word word;int index 0;foreach(FieldInfo f in fields)if(f.FieldType.Equals(typeof(Word))) {word new Word();word.word operatorTable[index];word.typeNum getTypeNumber(word.word);f.SetValue(t, word);}}public static int getTypeNumber(string s) {int start 100;for(int i 0; i operatorTable.Length; i) {if(operatorTable[i] s) {return start i;}}return WordPicker.noDefine;}internal static bool isArithmeticOperator(Word w) {return w.typeNum mul.typeNum || w.typeNum except.typeNum|| w.typeNum remain.typeNum|| w.typeNum add.typeNum || w.typeNum sub.typeNum;}internal static bool isCompareOperator(Word w) {return w.typeNum less.typeNum || w.typeNum greater.typeNum ||w.typeNum less_equal.typeNum || w.typeNum greater_equal.typeNum ||w.typeNum equal.typeNum || w.typeNum not_equal.typeNum;}internal static bool isExpressSymbol(Word w) {return w.typeNum add.typeNum || w.typeNum sub.typeNum|| w.typeNum mul.typeNum || w.typeNum except.typeNum|| w.typeNum remain.typeNum || w.typeNum left_bracket.typeNum || w.typeNum right_bracket.typeNum|| w.typeNum WordPicker.identifierTypeNumber|| w.typeNum WordPicker.numberTypeNumber;}}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CLanguage {/// summary/// 读词缓存流/// /summaryclass WordStream {WordPicker wordPicker;ListWord words new ListWord();int index -1;public WordStream(string file) {wordPicker new WordPicker(file);}/// summary/// 读取下一个词/// /summary/// returns/returnspublic Word ReadNextWord() {index;if(words.Count index) {Word w wordPicker.Scanner();if(words.Count 0 || words[words.Count - 1].typeNum ! WordPicker.endTypeNumber)words.Add(w);index words.Count - 1;}return words[index];}/// summary/// 现在的词/// /summary/// returns/returnspublic Word NowWord() {if(words.Count index index 0) {return words[index];}return null;}/// summary/// 上一个词/// /summary/// returns/returnspublic Word LastWord() {if(index 0) {return words[index - 1];}else {return null;}}/// summary/// 回退一个词/// /summarypublic void retractWord() {if(index 0) {index--;}}public void retractWord(int n) {if(index 0) {index-n;}}}
}输入
void main(){int first30; int secondfirst*20-5;int threesecond*3-20;if(first-secondthree){three23;}
}
输出