📄 program.cs
字号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace sy1_C_sharp
{
class Program //主程序执行流程
{
static void Main(string[] args)
{
//打开源文件
string FileName;
Console.WriteLine("请输入完整的文件路径:");
//FileName=Console.ReadLine();
FileName = "F:\\eg1.txt";
FileStream fs = File.OpenRead(FileName);
StreamReader sr = new StreamReader(fs);
//输出代码
//keyword 关键字 //1
//identity 标识符//2
//splitter 分隔符//3
//operater 运算衔//4
//constant 常量 //5
//unknow 非法字符//6
Console.WriteLine("源文件为:");
while (sr.Peek() >= 0)
{
string myStr = sr.ReadLine();
char[] chArray = myStr.ToCharArray();
Checks(chArray);
}
Console.ReadKey();
}
static void Checks(char[] chArray)
{
StringBuilder strBuffer = new StringBuilder();
for (int i = 0; i < chArray.Length; )
{
if (chArray[i] == ' ' || chArray[i] == '\n' || chArray[i] == '\t' || chArray[i] == '\r')
{
if (i < chArray.Length - 1) i++;
}
if (chArray[i] >= 'A' && chArray[i] <= 'Z') //如果开头是字母的
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1)) //一直是字母
{
i++;
while (chArray[i] >= 'A' && chArray[i] <= 'Z')
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1)) i++;
else
{
if (IsKeywords(strBuffer.ToString())) //全字母的串是否关键字或标识符
{
Console.WriteLine("1,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
}
else
Console.WriteLine("2,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
return;
}
}
}
if (char.IsDigit(chArray[i])) //字母接数字
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1))
{
i++;
while (char.IsDigit(chArray[i]))
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1)) i++;
else
{
Console.WriteLine("2,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
return;
}
}
}
}
if (IsKeywords(strBuffer.ToString())) //字母开头的串是否关键字或标识符
{
Console.WriteLine("1,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
}
else
{
Console.WriteLine("2,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
}
}
if (IsSplitter(chArray[i].ToString())) //判断分隔符
{
strBuffer.Append(chArray[i]);
if (chArray[i] == ':')
{
if (i < (chArray.Length - 1)) //:后若是=则为运算符
{
if (chArray[i + 1] == '=')
{
strBuffer.Append(chArray[i + 1]);
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
i++;
}
}
}
else
{
Console.WriteLine("3,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
}
if (i < (chArray.Length - 1)) i++;
else
{
return;
}
}
if (IsRationnlOperaters(chArray[i].ToString())) //判断关系运算符
{
strBuffer.Append(chArray[i]);
if (chArray[i] == '<')
{
if (i < (chArray.Length - 1))
{
if (chArray[i + 1] == '=')
{
strBuffer.Append(chArray[i + 1]);
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
i++;
}
if (chArray[i + 1] == '>')
{
strBuffer.Append(chArray[i + 1]);
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
i++;
}
}
}
if (chArray[i] == '>')
{
if (i < (chArray.Length - 1))
{
if (chArray[i + 1] == '=')
{
strBuffer.Append(chArray[i + 1]);
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
i++;
}
}
}
if (i < chArray.Length - 1) i++;
else
{
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
return;
}
}
if (IsMathsOpraters(chArray[i].ToString())) //判断数学运算符
{
strBuffer.Append(chArray[i]);
Console.WriteLine("4,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
if (i < (chArray.Length - 1)) i++;
}
if (char.IsDigit(chArray[i])) //判断数字开头的(即常量)
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1))
{
i++;
while (char.IsDigit(chArray[i]))
{
strBuffer.Append(chArray[i]);
if (i < (chArray.Length - 1)) i++;
}
Console.WriteLine("5,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
}
}
//判断非法字符
/* else
{
strBuffer.Append(chArray[i]);
Console.WriteLine("6,{0}", strBuffer); strBuffer.Remove(0, strBuffer.Length);
//if (i < (chArray.Length - 1)) i++;
//else return;
}*/
}
}
static bool IsKeywords(string str) //判断关键字的方法
{
string[] keywords = { "VAR", "PROCEDURE", "BEGIN", "WHILE", "DO", "IF", "THEN", "ELSE", "END", "INTEGER" };
for (int i = 0; i < keywords.Length; i++)
{
if (String.Compare(str, keywords[i], true) == 0)
return true;
}
return false;
}
static bool IsSplitter(string strChArray) //判断分隔符的方法
{
string[] splitters = { ",", ";", ".", ":", "(", ")" };
for (int i = 0; i < splitters.Length; i++)
{
if (String.Compare(strChArray, splitters[i], true) == 0)
return true;
}
return false;
}
static bool IsRationnlOperaters(string strChArray) //判断关系运算符的方法
{
string[] rationalopraters = { "<", "<=", "=", ">", ">=", "<>" };
for (int i = 0; i < rationalopraters.Length; i++)
{
if (String.Compare(strChArray, rationalopraters[i], true) == 0)
return true;
}
return false;
}
static bool IsMathsOpraters(string strChArray) //判断数学运算符的方法
{
string[] mathsopraters = { "+", "-", "*", "/", ":=" };
for (int i = 0; i < mathsopraters.Length; i++)
{
if (String.Compare(strChArray, mathsopraters[i], true) == 0)
return true;
}
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -