记录代码中的括号,尖括号,方括号,大括号的配对位置,忽略注释。
之前版本:
新版本:
/// <summary>
/// 记录代码中的括号,尖括号,方括号,大括号的配对位置,注释中的不记录。
/// </summary>
/// <param name="sText"></param>
/// <param name="C_ExplanatoryNote_Pos">注释位置</param>
/// <returns></returns>
/// 创建时间: 2022-08-26 最后一次修改时间:2022-10-01
public static DList_<Pair_<int, int>> _Syntax_C_FindBrackets(this string sText)
{
//注释用空格代替
string sReplace = sText._Syntax_C_Replace_ExplanatoryNote();
//找出所有的 (, <, [,{ 然后配对
string sLeft = "(<[{";
DList_<Pair_<int, int>> dLeft = new DList_<Pair_<int, int>>();
for (int i = 0; i < sReplace.Length; ++i)
{
char cLeft = sReplace[i];
if(sLeft.IndexOf(cLeft) != -1)
{
dLeft.Add(new Pair_<int, int>(i, -1));
}
}
//查找配对
DListNote_<Pair_<int, int>> pNote = dLeft.First;
while (pNote != null)
{
Pair_<int, int> p = pNote.Data;
p.Second = _Syntax_C_NextBrackets(sReplace, p.First);
pNote = pNote.Next;
}
DList_<Pair_<int, int>> dResult = new DList_<Pair_<int, int>>();
pNote = dLeft.First;
while (pNote != null)
{
Pair_<int, int> p = pNote.Data;
if (p.Second != -1)
dResult.Add(p);
pNote = pNote.Next;
}
return dResult;
}
/// <summary>
/// 把C++代码中的注释用空格代替
/// </summary>
/// <param name="sText"></param>
/// <returns></returns>
/// 创建时间: 2022-09-01 最后一次修改时间:2022-09-01
public static string _Syntax_C_Replace_ExplanatoryNote(this string sText)
{
StringBuilder sb = new StringBuilder(sText.Length);
DList_<Pair_<int, int>> enp = _Syntax_C_ExplanatoryNote_Pos(sText);
for(int i = 0; i < sText.Length; ++i)
{
Boolean bFind = false;
foreach (Pair_<int, int> p in enp)
{
if( i >= p.First && i <= p.First + p.Second) //p.Second 是长度
{
bFind = true;
break;
}
}
if (bFind)
sb.Append(' ');
else
sb.Append(sText[i]);
}
return sb.ToString();
}
/// <summary>
/// 记录注释的位置和长度
/// </summary>
/// <param name="sText"></param>
/// <returns></returns>
/// 创建时间: 2022-08-26 最后一次修改时间:2022-08-26
public static DList_<Pair_<int,int>> _Syntax_C_ExplanatoryNote_Pos(this string sText)
{
DList_<Pair_<int, int>> dResult = new DList_<Pair_<int, int>>();
for (int i = 0; i < sText.Length; ++i)
{
if (sText[i] == '/')
{
if (i + 1 < sText.Length)
{
if (sText[i + 1] == '/')
{
int nStart = i;
i = sText.IndexOf('\n', i + 1);
if (i == -1)
{
dResult.Add(new Pair_<int, int>(nStart, sText.Length - i));
break;
}
else
{
dResult.Add(new Pair_<int, int>(nStart, i - nStart));
}
}
else if (sText[i + 1] == '*')
{
int nStart = i;
i = sText.IndexOf("*/", i + 1);
if (i == -1)
{
dResult.Add(new Pair_<int, int>(nStart, sText.Length - i));
break;
}
else
{
dResult.Add(new Pair_<int, int>(nStart, i - nStart + 2));
}
}
}
}
}
return dResult;
}
记录代码中的括号,尖括号,方括号,大括号的配对位置,忽略注释。相关推荐
- java 正则 尖括号_使用JS正则表达式替换括号,尖括号等
如下所示:function toTxt(str) { var RexStr = /\|\"|\'|\&/g str = str.replace(RexStr, function(Ma ...
- 关于vue文件中template标签尖括号下的红波浪线问题
首先,vscode今天突然出现这个问题,所有的template标签都被标红 查找百度说修改.eslintrc.js的数据 在其中的pars ...
- 如何在html页面中左尖括号,想要在HTML中显示一个尖括号“
[判断题]教学评价就是在期末的时候给学生打分数. [判断题]面包中放不放盐都可以. ( ) [多选题]十五.企业存货成本的构成包括( ) [多选题]伤寒.金匮.温病中均有治疗热证便秘的经方,以下按病性 ...
- xml中的sql 标签中应使用 尖括号,感叹号 注释. 其他方式会被当成sql语句执行.
xml中的sql 标签中应使用<!----> 注释. 其他方式会被当成sql语句执行. 如下
- C++中带有空尖括号的template <>
结论:template<>告诉编译器遵循模板特化,特别是完全特化 通常,class A看起来像这样: template<class T> class A{// general ...
- jQuery中选择器加尖括号的区别
$("img")为一个get的方法,是读取标签为"img"元素的属性及设置相应的属性: $("<img/>")为一个set的方法 ...
- java中向上的尖括号是什么,什么lt; Tgt; (尖括号)在Java中是什么意思?
I am currently studying Java and have recently been stumped by angle brackets(<>). What exactl ...
- oracle 尖括号_关于方括号和尖括号的区别
1. []:内的内容意思是:可写可不写 例如:/home下就一个list 文件,使用ls --help中的 Usage: ls [OPTION]... [FILE]... 2. {}:那就必须要在{} ...
- 命令行说明中方括号、尖括号的含义
命令行说明中方括号.尖括号的含义 命令行语法中,某些字符与格式有着特殊的含义,下面主要针对[].<>.|.-等符号进行说明: 一.方括号[ ] 方括号([ ])表示里面的元素(参数.值或信 ...
最新文章
- mysql trigger before insert_在MYSQL中创建一个BEFORE INSERT TRIGGER
- Linux下的摄影后期处理软件
- vsftp建立虚拟用户不同目录分配不同权限操作步骤详解
- 第3章 Linux内核调试手段之三
- 信息学奥赛一本通(2063:【例1.4】牛吃牧草)
- epoll实现socket通信
- 内置模块(time、random、hashlib、os)
- 数据结构最短路径例题_数据结构(五)图---最短路径(迪杰斯特拉算法)
- c语言编程 设计密码锁,如何设计最简单的密码锁程序
- android 渐变蒙版_干货分享(第八期):PS蒙版教学,利用蒙版制造渐隐效果
- 算数平均数\几何平均数\调和平均数
- 已知一点经纬度及与另一点距离和航向,求另一点经纬度
- load average 计算
- 逆序字符串 和 字符串的逆序输出 的区别~
- 《安富莱嵌入式周报》第287期:下一代Windows12界面,支持各种工业以太网协议参考,百款在线电子开发工具,seL4安全微内核,旋转拨号手机,PSP掌机逆向
- CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
- 左右滑动日历(微信小程序)
- bootstrap4.0图标使用_很不错的两款Bootstrap Icon图标选择组件
- 微信小程序中的iPhone X适配问题
- 【常见问题】03 开虚拟机导致电脑蓝屏