一个简单的中文编译器

文章提出了一个创新的想法,通过建立中文关键字与编程语言符号的映射表,实现中文代码到英文代码的快速批量替换。这种方法使得中文编程变得可能,提高了代码的可读性,尤其是对于中文使用者来说。转换过程简洁高效,能直接生成可读或可执行的代码。
摘要由CSDN通过智能技术生成
想想注释即代码,伪代码直接可以运行,中文代码和英文代码可以快速的交互,全中文编程界面是不是很刺激!

比如如下的代码:

 int  main(){
 int  a =  50
 return 0
 }

可以用中文来开发:

 整型  主函数(){
 整型  a 等于  50
 返回 0
 }

那么如何能够快速的将中文转化成英文呢,我们只需要一个映射表。

   Map<String,Object> map=new HashMap<String,Object>();
	map.put("等于","=");
	map.put("大于",">");
	map.put("小于","<");
	map.put("主函数","main");
	map.put("整型","int");
	map.put("浮点数","float");
	map.put("字符串","String");
	map.put("返回","return");
```java
   for (Map.Entry<String, Object> entry : map.entrySet()) {  
      res=res.replace(entry.getKey(),(String)entry.getValue());
   }

这样就成快速的把中文和英文代码快速替换,形成一份快速可读的代码,或者直接可以编译运行的代码,是不是很简单?

图片
在这里插入图片描述

C#简易编译器 namespace 编译 { public class Grammar { List<token> tokens; List<symble> symbles; public string error = ""; int i = 0; public Grammar(Morphology m) { tokens = m.tokens; symbles = m.symbles; Dispose(); } private void Next() { if (i < tokens.Count - 1) { i++; } } private void Before() { if (i > 0) { i--; } } #region 主要函数 private void Dispose() { if (tokens[i].Code == 12)//含有program { Next(); if (tokens[i].Code == 18)//是标识符 { //执行程序体 Next(); ProBody(); } else { error = "该程序program缺少方法名"; } } else { error = "该程序缺少关键字:program"; } } #endregion #region 程序体 private void ProBody() { if (tokens[i].Code == 16) { Next(); VarDef(); } else if (tokens[i].Code == 2) { Next(); ComSent(); } else { error = "程序体缺少var或begin"; } } #endregion #region 变量定义 private void VarDef() { if (IsIdlist()) { Next(); if (tokens[i].Code == 29)//: { Next(); if (tokens[i].Code == 9 || tokens[i].Code == 3 || tokens[i].Code == 13)//integer,bool,real { int j = i; j = j - 2; symbles[tokens[j].Addr].Type = tokens[i].Code; j--; while (tokens[j].Code == 28) { j--; symbles[tokens[j].Addr].Type = tokens[i].Code; } Next(); if (tokens[i].Code == 30) { Next(); if (tokens[i].Code == 2) { Next(); ComSent(); } else { VarDef(); } } else { error = "变量定义后面缺少;"; } } else { error = "变量定义缺少类型或类型定义错误"; return; } } else { error = "var后面缺少冒号"; } } else { error = "变量定义标识符出错"; } } #endregion #region 判断是不是标识符表 private bool IsIdlist() { if (tokens[i].Code == 18) { Next(); if (tokens[i].Code == 28)//, { Next(); return IsIdlist(); } else { Before(); return true; } } else { return false; } } #endregion #region 复合句 private void ComSent() { SentList(); if (error == "") { if (tokens[i].Code == 6) { return; } else { error = "复合句末尾缺少end"; } } } #endregion #region 语句表 private void SentList() { ExecSent(); if (error == "") { Next(); if (tokens[i].Code == 30) { Next(); SentList(); } } } #endregion #region 执行句 private void ExecSent() { if (tokens[i].Code == 18) { Next(); AssiSent(); } else if (tokens[i].Code == 2 || tokens[i].Code == 8 || tokens[i].Code == 17) { StructSent(); } else { Before(); } } #endregion #region 赋值句 private void AssiSent() { if (tokens[i].Code == 31)//:= { Next(); Expression(); } else { error = "赋值句变量后缺少:="; } } #endregion #region 表达式 private void Expression() { if (tokens[i].Code == 7 || tokens[i].Code == 15 || (tokens[i].Addr != -1 && symbles[tokens[i].Addr].Type == 3)) { BoolExp(); } else { AritExp(); } } #endregion #region 布尔表达式 private void BoolExp() { BoolItem(); if (error == "") { Next(); if (tokens[i].Code == 11) { Next(); BoolExp(); } else { Before(); } } else { return; } } #endregion #region 布尔项 private void BoolItem() { BoolFactor(); if (error == "") { Next(); if (tokens[i].Code == 1) { Next(); BoolItem(); } else { Before(); } } } #endregion #region 布尔因子 private void BoolFactor() { if (tokens[i].Code == 10) { Next(); BoolFactor(); } else { BoolValue(); } } #endregion #region 布尔量 private void BoolValue() { if (tokens[i].Code == 15 || tokens[i].Code == 7) { return; } else if (tokens[i].Code == 18) { Next(); if (tokens[i].Code == 34 || tokens[i].Code == 33 || tokens[i].Code == 32 || tokens[i].Code == 37 || tokens[i].Code == 36 || tokens[i].Code == 35) { Next(); if (tokens[i].Code == 18) { } else { error = "关系运算符后缺少标识符"; } } else { Before(); } } else if (tokens[i].Code == 21) { BoolExp(); //? if (tokens[i].Code == 22) { return; } else { error = "布尔量中的布尔表达式缺少一个)"; } } else { error = "布尔量出错"; } } #endregion #region 算数表达式 private void AritExp() { Item(); if (error == "") { Next(); if (tokens[i].Code == 23 || tokens[i].Code == 24) { Next(); AritExp(); } else { Before(); return; } } else { return; } } #endregion #region 项 private void Item() { Factor(); if (error == "") { Next(); if (tokens[i].Code == 25 || tokens[i].Code == 26) { Next(); Item(); } else { Before(); return; } } else { return; } } #endregion #region 因子 private void Factor() { if (tokens[i].Code == 21) { Next(); AritExp(); Next(); if (tokens[i].Code == 22) { return; } else { error = "因子中算数表达式缺少)"; } } else { CalQua(); } } #endregion #region 算数量 private void CalQua() { if (tokens[i].Code == 18 || tokens[i].Code == 19 || tokens[i].Code == 20) { return; } else { error = "算数量出错"; } } #endregion #region 结构句 private void StructSent() { if (tokens[i].Code == 2) { Next(); ComSent(); } else if (tokens[i].Code == 8) { Next(); IfSent(); } else if (tokens[i].Code == 17) { Next(); WhileSent(); } } #endregion #region if语句 private void IfSent() { BoolExp(); if (error == "") { Next(); if (tokens[i].Code == 14) { Next(); ExecSent(); Next(); if (tokens[i].Code == 5) { Next(); ExecSent(); } else { Before(); return; } } else { error = "if...then语句缺少then"; } } else { error = "if语句布尔表达式出错"; } } #endregion #region while语句 private void WhileSent() { BoolExp(); if (error == "") { Next(); if (tokens[i].Code == 4) { Next(); ExecSent(); } else { error = "while语句缺少do"; } } } #endregion } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydd20058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值