采用实验1的简单语言,设计并实现含多条简单赋值语句的语法语义分析程序,要求采用递归下降翻译法。

注意与实验1、2的衔接。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SemanticsAnalysis {/// <summary>/// 四元式/// </summary>class FourFormula {public Word result;public Word arg1;public Word operate;public Word arg2;public override string ToString() {string s = result.word+ " = " + arg1.word;if(operate != null) {s +=" "+ operate.word;}if(arg2 != null) {s += " " + arg2.word;}return s;         }}class SemanticsAnalysis {WordStream wordStream = new WordStream("text.txt");// List<Error> errors = new List<Error>();static void Main(string[] args) {SemanticsAnalysis syntax = new SemanticsAnalysis();syntax.SemanticsParser();Console.ReadKey();}/// <summary>/// 语义分析/// </summary>public 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>/// 函数/// </summary>private 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, "(缺失");}arguments();word = wordStream.ReadNextWord();if(word.typeNum != Symbols.right_bracket.typeNum) {addError(word, ")缺失");}word = wordStream.ReadNextWord();if(word.typeNum != Symbols.left_curly_bracket.typeNum) {addError(word, "{缺失");}//语句串statementSequence();//}word = wordStream.ReadNextWord();if(word.typeNum != Symbols.right_curly_bracket.typeNum) {addError(word, "}缺失");wordStream.retractWord();}}/// <summary>/// 参数/// </summary>private 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 name="word"></param>/// <returns></returns>private bool isIdentifier(Word word) {return word.typeNum == WordPicker.identifierTypeNumber;}/// <summary>/// 语串/// </summary>private void statementSequence() {Word word = wordStream.ReadNextWord();while(word.typeNum != Symbols.right_curly_bracket.typeNum && word.typeNum != WordPicker.endTypeNumber) {if(KeyWords.isType(word)) {defineStatement();}else if(isIdentifier(word)) {assignStatement();}else {addError(word, "多余");}/*  else if(KeyWords.isCondition(word)) {}else if(KeyWords.isFORLoop(word)) {}else {// addError(word, "多余");}*/word = wordStream.ReadNextWord();}wordStream.retractWord();}/// <summary>/// 定义语句/// </summary>private void defineStatement() {Word word = wordStream.ReadNextWord();if(!isIdentifier(word)) {addBeforeError(word, "变量名缺失");wordStream.retractWord();}word = wordStream.ReadNextWord();if(word.typeNum == Symbols.assign.typeNum) {FourFormula fourFormula = new FourFormula();fourFormula.result = wordStream.LastWord();               fourFormula.arg1 = expressStatement();addFourFormula(fourFormula);word = wordStream.ReadNextWord();              }if(word.typeNum == Symbols.comma.typeNum) {defineStatement();}else if(word.typeNum != Symbols.semicolon.typeNum) {addBeforeError(word, ";缺失");wordStream.retractWord();}}/// <summary>/// 赋值语句/// </summary>private void assignStatement() {FourFormula fourFormula = new FourFormula();fourFormula.result = wordStream.NowWord();Word word = wordStream.ReadNextWord();if(word.typeNum != Symbols.assign.typeNum) {addBeforeError(word, "=缺失");wordStream.retractWord();}fourFormula.arg1=expressStatement();addFourFormula(fourFormula);word = wordStream.ReadNextWord();if(word.typeNum != Symbols.semicolon.typeNum) {addBeforeError(word, ";缺失");wordStream.retractWord();}}#region 表达式解析/// <summary>/// 表达式/// </summary>private Word expressStatement() {Word express;FourFormula fourFormula = new FourFormula();express = term();fourFormula.arg1 = express;          Word word = wordStream.ReadNextWord();while(word.typeNum == Symbols.add.typeNum || word.typeNum == Symbols.sub.typeNum) {fourFormula.operate = word;fourFormula.arg2 = term();express = createTempVar();fourFormula.result = express;addFourFormula(fourFormula);fourFormula = new FourFormula();fourFormula.arg1 = express;               word = wordStream.ReadNextWord();}wordStream.retractWord();return express;}/// <summary>/// 项/// </summary>/// <returns></returns>private Word term() {Word term;FourFormula fourFormula = new FourFormula();term = factor();fourFormula.arg1 = term;Word word = wordStream.ReadNextWord();while(word.typeNum == Symbols.mul.typeNum || word.typeNum == Symbols.except.typeNum || word.typeNum == Symbols.remain.typeNum) {fourFormula.operate = word;fourFormula.arg2=factor();term = createTempVar();fourFormula.result = term;addFourFormula(fourFormula);fourFormula = new FourFormula();fourFormula.arg1 = term;word = wordStream.ReadNextWord();}wordStream.retractWord();return term;}/// <summary>/// 表达式因子/// </summary>private 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();}return factor;}#endregion/// <summary>/// 判断是否是数值变量类型/// </summary>/// <param name="word"></param>/// <returns></returns>private bool isValue(Word word) {return word.typeNum == WordPicker.numberTypeNumber|| word.typeNum == WordPicker.charTypeNumber|| word.typeNum == WordPicker.stringTypeNumber|| word.typeNum == WordPicker.identifierTypeNumber;}#region 添加四元式List<FourFormula> list = new List<FourFormula>();/// <summary>/// 保存四元式/// </summary>/// <param name="fourFormula"></param>private void addFourFormula(FourFormula fourFormula) {list.Add(fourFormula);}int idNameCount = 0;/// <summary>/// 创建临时变量/// </summary>/// <returns></returns>public Word createTempVar() {Word word = new Word();word.word = "$t" + idNameCount++;word.typeNum = 0;return word;}#endregion      #region 输出错误bool success = true;//语法解析结果/// <summary>/// 输出在特定之前的错误/// </summary>/// <param name="word"></param>/// <param name="v"></param>private void addBeforeError(Word word, string v) {success = false;Console.WriteLine(word.ToPositionInfo() + "\t之前" + v);}/// <summary>/// 输出错误/// </summary>/// <param name="word"></param>/// <param name="v"></param>private void addError(Word word, string v) {success = false;Console.WriteLine(word.ToPositionInfo() + "\t" + v);}#endregion}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;namespace SemanticsAnalysis {/// <summary>/// 词/// </summary>class Word {public int typeNum = 0;public string word;public int col = 0;public int row = 0;public override string ToString() {return "(" + typeNum + "," + word + ")";}public string ToPositionInfo() {return "行:" + ( row + 1 ) + "\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 WordPicker(string file) {input = File.ReadAllLines(file);identifierTypeNumber = KeyWords.keyWordTable.Length + 1;numberTypeNumber = KeyWords.keyWordTable.Length + 2;charTypeNumber = KeyWords.keyWordTable.Length + 3;stringTypeNumber = KeyWords.keyWordTable.Length + 4;operatorSort = new string[Symbols.operatorTable.Length];Array.Copy(Symbols.operatorTable, operatorSort, Symbols.operatorTable.Length);Array.Sort(operatorSort);Array.Reverse(operatorSort);}/// <summary>/// 读词/// </summary>/// <returns></returns>public Word Scanner() {Word myWord;read();readValidChar();//标识符if(char.IsLetter(character)) {myWord = readWord();}//数值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 name="myWord"></param>private 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 name="myWord"></param>private 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 name="myWord"></param>private 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 name="myWord"></param>private 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 name="myWord"></param>private 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 name="word"></param>/// <returns></returns>private 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 name="word"></param>/// <returns></returns>private 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>/// 读一个字符/// </summary>void read() {if(input.Length <= row || input.Length == row + 1 && input[input.Length - 1].Length <= col) {character = '\0';}else {if(col >= input[row].Length) {col = 0;row++;}character = input[row][col];col++;}}/// <summary>/// 去除无效字符/// </summary>void readValidChar() {while(char.IsWhiteSpace(character)) {if(character == '\0') {return;}read();}//判断注释if(character == '/' && input[row].Length > col) {ignoreNote();}}/// <summary>/// 忽视注解/// </summary>private 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>/// 回退一个字符/// </summary>void retract() {col = col - 2;checkCol();read();}/// <summary>/// 回退v个字符/// </summary>/// <param name="v"></param>private void retract(int v) {if(v == 0)return;col = col - v - 1;checkCol();read();}/// <summary>/// 检查col是否合法/// </summary>void 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 SemanticsAnalysis {class KeyWords {/// <summary>/// 关键字表/// </summary>public 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></returns>public static int getTypeNumber(string s) {for(int i = 0; i < keyWordTable.Length; i++) {if(keyWordTable[i] == s) {return i+1;}}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 isCondition(Word word) {return word.typeNum == IF.typeNum;}internal static bool isFORLoop(Word word) {return word.typeNum == FOR.typeNum|| word.typeNum == WHILE.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;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SemanticsAnalysis {/// <summary>/// 读词缓存流/// </summary>class WordStream {WordPicker wordPicker;List<Word> words = new List<Word>();int index = -1;public WordStream(string file) {wordPicker = new WordPicker(file);}/// <summary>/// 读取下一个词/// </summary>/// <returns></returns>public 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></returns>public Word NowWord() {if(words.Count > index && index >= 0) {return words[index];}return null;}/// <summary>/// 上一个词/// </summary>/// <returns></returns>public Word LastWord() {if(index > 0) {return words[index - 1];}else {return null;}}/// <summary>/// 回退一个词/// </summary>public void retractWord() {if(index >= 0) {index--;}}}
}

输入:

void main(int a,int b){  //int a=4-2;//int a=a,b=a*82,c= a;bin=12-12* xa;int sout=10-2.23;mess= ok*(6-as);
}

输出:

编译原理(三)之语义分析相关推荐

  1. 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe. 看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print su ...

  2. 笔记-编译原理-实验四-语义分析与中间代码生成

    实验四. 语义分析及中间代码生成 设计思想 根据对属性文法及语义分析.中间代码生成的学习,可以将实验二.三的两种语法分析器进行一定的改造,以达到进行语法分析的同时进行语义分析并生成中间代码.根据PL0 ...

  3. 哈工大软件学院编译原理实验3——语义分析

    实验目的 这次实验的实验目的其实很明确--对源码进行语义分析,输出语义分析结果,并要求有适当的错误处理机制.可是指导书上实验目的要求自己分析,我的分析结果:本次实验要求自己定义上次实验的语法分析的文法 ...

  4. 编译原理 实验4 语义分析(基于PL/0,使用C++代码编写)

    文章目录 1 实验任务 2 实验内容 3 错误类型声明 4 文件结构与代码 4.1 代码结构 4.2 详细代码 4.3 递归下降子程序的声明 5 常变量说明 6 运行结果 1 实验任务 审查每一个语法 ...

  5. 三万五千字长文!让你懂透编译原理(六)——第六章 属性文法和语法制导翻译

    三万五千字长文!让你懂透编译原理(六)--第六章 属性文法和语法制导翻译 长文预警 系列文章传送门: 万字长文+独家思维导图!让你懂透编译原理(一)--第一章 引论 万字长文!让你懂透编译原理(二)- ...

  6. 【C++实现】编译原理 免考小队 消除一切左递归

    背景 期末考试免考,冲! 实验名称 消除一切左递归 实验时间 2020年5月27日 到 2020年5月31日 院系 信息科学与工程学院 组员姓名 Chocolate.kry2025.钟先生.leo.小 ...

  7. 编译原理实验三 语义分析程序设计与实现

    一.实验目的 在实现词法.语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法,并完成 ...

  8. 编译原理语义分析_编译原理 第一章 绪论

    编译原理系列,是在学习本校 "编译技术" 这门课程时,所作记录,参考教材为 <编译技术基础教程>清华大学出版社和<程序设计语言编译原理>国防工业出版社(陈火 ...

  9. (三)JVM成神路之全面详解执行引擎子系统与JIT即时编译原理

    引言 执行引擎子系统是JVM的重要组成部分之一,在JVM系列的开篇曾提到:JVM是一个架构在平台上的平台,虚拟机是一个相似于"物理机"的概念,与物理机一样,都具备代码执行的能力.但 ...

  10. 每天两小时学习编译原理——一个学期的第三天,希望能坚持长久✨

    上一篇:每天两小时学习编译原理--一个学期的第二天,希望能坚持长久✨ 下一篇:每天两小时学习编译原理--一个学期的第四天,希望能坚持长久✨ 继续学习 编译程序过程 词法分析 语法分析 语义分析与中间代 ...

最新文章

  1. 【OpenCV】读取csv文件
  2. 底部居中_4月9日小米9 SE布朗熊发布;小米新专利前置摄像挪屏幕底部
  3. Spring Cloud入门教程-Hystrix断路器实现容错和降级
  4. c++宏定义常量为什么使用移位_干货 | C语言系列3——常量,运算符,常用数学函数.........
  5. 《C++标准程序库》学习笔记1--第二章第三章
  6. gdiplus判断一个点是否在圆弧线上_福建教师招聘考试小学数学面试教案:圆的认识...
  7. 在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据
  8. 针对网上的一份netty的面试题之(netty的粘包和拆包)
  9. 【Hadoop Summit Tokyo 2016】一小时之内使用Apache Nifi从零到数据流
  10. matlab2016a的光伏阵列,DAMPPT 光伏电池阵列输出功率受光照强度和温度变化的影响,因此最大 点跟踪( )技 matlab 272万源代码下载- www.pudn.com...
  11. 剪贴板增强工具 Ditto
  12. 负载均衡的的基本功能和实现原理
  13. 面试常见的js简单算法
  14. date linux 计算日期,科技常识:linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...
  15. c语言脱验证,CCAR.适航符合性验证思路简述
  16. 安装redhat 8.0红帽系统
  17. 我的webgl学习之路(一)
  18. 理财收益的计算 计算浮点数的n次方 1466
  19. c语言中如何用sqar函数,简易函数信号发生器设计_毕业论文.doc
  20. 企业微信聊天工具栏怎么开启?如何调整位置?

热门文章

  1. post多个参数_关于HTTP GET和POST的区别
  2. android 文件 c语言 jni,Android jni 调用的so文件一个函数的反汇编 高手来看看
  3. 软件构造学习笔记-第四周
  4. 7-34 任务调度的合理性 (25 分)(思路加详解+兄弟们冲呀)
  5. 初探react,用react实现一个todoList功能
  6. [Redis6]新数据类型_Geospatial
  7. [蓝桥杯2015决赛]五星填数-枚举+数论
  8. cma检测_CMA检测方法
  9. CoreJava 笔记总结-第十二章 并发-2
  10. 针对深度学习的GPU芯片选择