很高兴能为大家带来JAse的预览版,一款基于as+js的网页语法编辑器。在经历了jssc的静态DFA语法解析高亮的研究和JAte文本编辑器的失败之后,JAse终于能够吸取两者的经验和不足,慢慢地开发至今。开头不多说了,来看预览地址(暂且只有js解析器,其它的都是不存在的;基于Flash Player 10):
两个都可以:http://jase.googlecode.com/svn/trunk/jase1/bin/index.html;http://army8735.org/wp-content/uploads/jase/
它的下载地址:http://code.google.com/p/jase/downloads/list
它的svn:http://jase.googlecode.com/svn/trunk/jase1/
目前只能支撑千行级代码编辑,总体性能并不是卡在解析器上,而是卡在flash本身的input上。有过经验的人可能感受颇深,何时adobe能提供高性能的textfield?
JAse基本内容分为两块:编辑器提供基础编辑功能、解析器以插件形式提供高亮功能。两者之间通过一个接口连接,也就是说所有的外部解析器必须实现IParser接口,编辑器每次的更改也都是调用接口方法。如此实现了扩展语法的功能,只要实现了接口,你可以开发任意的高亮程序。当然,我自己也写了个AbstractParser基类,可以方便地在其基础之上拓展。
编辑器的undo、redo等功能还未和解析器链接上,因此使用这些button的话可能会造成高亮错误,这并不是程序本身原因。预览版放出只是展示基本输入修改已经ok了。其它将会在后续版本中逐渐开发。
JAse的整体流程是:寻找目标textarea(如果指定id直接获取,否则以document上第一个textarea为目标)=>隐藏textarea,将自己替换掉它的位置=>加载外部解析器(如果指定syntax直接加载,否则出现界面选择)=>编辑内容=>提交内容(如果指定url则使用urlloader,否则将内容放回textarea并寻找父级form提交)。
其间动态破损、修复、显示模型经历过3次算法变更得以成型,斜线动态区分perl正则和除法的算法也经历过2次变更,让我用图来简单说下吧。

在这种情况下,每行代码首先会被解析开始状态(如注释、字符串或者普通),同时渲染标明此行是否被高亮过。这两个状态List是和每行代码一一对应的,增加随之增加,修改随之修改,删除随之删除。而区块List则完全脱离于代码行索引,自成一家。
这样做的好处是分析和显示互相分开,每次编辑器内容被修改时先有破损和修复模型来完成行状态、渲染状态和区块的操作;然后由显示模型取得可视区域再从区块List中取出索引对每块进行高亮。
但坏处也很明显,每次操作对 区块List的改动太大了,前面增加一个字符,会导致所有后面的索引进行修改(自增1),因此很快就被废除,有了第2种想法。

废除区块索引。每次编辑器内容修改,都去计算行状态并且设置涉及行的渲染状态为否以便重新渲染。这个算法对分析阶段来说有了极大的便利,但是在显示阶段却叫苦不迭——在渲染每一行代码的时候,都要根据行状态重新对此行代码进行一遍DFA解析,而这个工作在前面的分析阶段已经做过了(大部分)。同样的功能需要两份代码显得冗余,要合并到一起的话又会变得难以维护,而且多分析一次也显得没有必要。
在经历了一段时间的纠结后,最终还是变更到现在这个样子。

区块List成为二维的,亦和每行对应。然后List中的List保存索引。不过和第1种方式略有不同,之前保存的是绝对索引(字符串的下标),而这里保存的是相对索引(相对于行代码第一个字符而言)。这样每次渲染的时候,只要知道行代码的第一个字符索引,然后遍历这行对应的区块List,相加得出绝对索引即可完成显示。而且每次修改后,后面行的相对索引都无需变更,综合了以上两种方法的优点。
至于斜线的动态区分,最终情况和这类似。静态DFA解析的情况下很容易确定一个斜线的含义究竟是除法还是正则——因为源代码扫猫是从头至尾的。动态情况下因为不确定性,不可能每次修改都从头遍历代码,代价太大了,最好能够从当前行或者前面几行判断出。最初我采用向前回溯的方式,这显得很愚蠢,而且前面行还可能存在单行注释、多行注释等情况干扰(词法分析无需考虑,因为注释空白一开始就被剔除了),基本上行不通。
后来我为每行增加一个布尔值来标明行起始状态如果出现斜线的话它的含义是什么,每次内容修改也会根据解析情况重置它,就和重置行状态和是否被渲染一样。
另外曾经让我非常头疼的一个地方是事件侦听部分。我希望的是每次编辑器内容修改时,所触发的侦听在修改后立刻执行,而as中所有的事件侦听都是在之前执行。这导致使用解析器进行分析显示的时候,实际上代码还根本未发生改变,显然这是个悖论。唯一的做法就是将侦听中模拟事件率先执行,然后通过preventDefault()来取消默认事件发生。这里有个问题,那就是像删除这样的事件(无论del还是backspace或者选区替换)是无法被取消的。所幸的是最终这些难题被一一解决——包括TAB键不能使用,感兴趣的可以查看编辑器源文件来了解是怎么做到的。只关心外部解析器的话不用考虑。
试用过程中有任何问题、反馈或者建议请不吝提出。在beta版完成之后,也会出系列文章来详细介绍JAse的所有技术,就像jssc一样。
分享到:
相关推荐
在技术实现上,【心兰记事本】基于Java基础类库(Jase)和Java标准版(J2SE)进行开发。Java作为跨平台的编程语言,保证了软件的兼容性和稳定性,无论是在Windows、Linux还是Mac OS上,用户都能享受到一致的操作体验...
2025免费毕设附带论文 SpringBoot+Vue.js 启动教程: https://www.bilibili.com/video/BV11ktveuE2d/?share_source=copy_web 二开教程:https://www.bilibili.com/video/BV18i421i7Dx/?share_source=copy_web 讲解视频:https://www.bilibili.com/video/BV1Tb421n72S/?share_source=copy_web
C语言数组图像数据转图片
基于深度学习的癫痫识别软硬件协同设计.zip
毕业设计-农场小程序 1.7.6-整站商业源码.zip
内容概要:本文详细介绍了RBP神经网络PID自适应控制模型及其优势。首先解释了RBP神经网络的基本概念,然后展示了如何利用Matlab进行仿真建模,重点在于无需手动调节PID参数即可实现对复杂工业控制系统的高效管理。文中不仅提供了具体的Matlab代码片段用于演示关键操作流程,还对比了传统PID控制器存在的局限性,突出了RBP神经网络PID自适应控制模型在自动化程度方面的显著提升。最后,作者分享了一系列辅助学习材料,如思路讲解、代码解析和实际应用场景实例,旨在帮助读者深入掌握这一先进技术。 适合人群:对现代工业控制系统感兴趣的工程技术人员、科研工作者及高校相关专业师生。 使用场景及目标:适用于需要提高工业控制系统灵活性和响应速度的场合,特别是那些难以预估环境变化或频繁变动的工作环境中。目标是在减少人为干预的同时确保系统的稳定性和性能。 其他说明:随文附赠详尽的学习资料,便于读者进一步研究和实践。
内容概要:本文介绍了如何使用Google Earth Engine (GEE) 平台对特定区域的植被状况指数(VCI)进行计算与干旱情况评估。首先定义了研究区(ROI),加载了FAO GAUL 2015年数据集作为参考,并选取了2001年至2003年间MODIS NDVI影像数据集。通过对NDVI值进行归一化处理得到VCI,再基于VCI值将研究区内分为七个干旱等级(极端干旱、严重干旱、中度干旱、轻度干旱、无干旱1、无干旱2、无干旱3)。此外,还绘制了VCI中位数的直方图,并计算了各等级干旱面积。最后,将最终生成的VCI模式图导出到Google Drive,并制作了干旱面积分类图表。; 适合人群:对遥感数据分析、干旱监测感兴趣的科研人员或学生,以及有一定编程基础并希望深入学习GEE平台应用的人士。; 使用场景及目标:①掌握利用GEE平台进行时空数据分析的方法;②理解VCI计算原理及其在干旱监测中的应用;③学会如何通过编程实现大规模遥感影像处理任务;④获取实践经验,能够独立完成类似项目的开发。; 阅读建议:本教程详细记录了从数据准备到结果可视化的一系列操作步骤,读者应跟随代码逐步执行,同时注意理解每个函数的作用及参数设置的意义。建议读者在实际操作过程中尝试调整部分参数,观察其对结果的影响,从而加深理解。
内容概要:本文介绍了基于损伤模型的硫酸根离子侵蚀混凝土的细观数值模拟方法,并提供了完整的教学视频资源。主要内容涵盖三个方面:一是利用Python实现混凝土在硫酸盐环境下损伤演化的数值模型,包括损伤演化计算、骨料生成、离子扩散和损伤耦合等模块;二是通过具体的Python代码展示了各个模块的具体实现方式,如使用Numpy进行高效矩阵运算、OpenCV绘制骨料分布图以及Matplotlib生成损伤演变动画;三是提供了一套详细的20集教学视频,涵盖了从CT图像处理到三维模型扩展的全流程,特别强调了并行计算优化方案的应用。 适合人群:土木工程专业学生、研究人员以及从事建筑材料研究的技术人员。 使用场景及目标:适用于希望深入了解混凝土在硫酸盐环境下的损伤机理的研究人员和技术人员,帮助他们掌握细观数值模拟的方法和技巧,提高科研水平。 其他说明:文中提供的完整代码和教学视频资源可以帮助读者更好地理解和应用所介绍的数值模拟方法。
智能通风换气系统是一种能够自动调节室内空气质量,以达到适宜居住环境的系统。本文介绍的基于STM32微控制器的智能通风换气系统,其设计理念是通过集成各种传感器,实时监测房间内的环境指标,并结合控制系统实现自动或手动控制通风换气,以保障室内空气质量。 系统的主要组成部分包括: 1. STM32F407ZGT6单片机:该单片机是系统的核心控制单元,负责处理来自各个传感器的数据,执行用户设置的指令,以及控制执行机构的动作。 2. 传感器模块:系统中使用了以下传感器来收集环境数据: - DHT11温湿度传感器:用于测量房间内的温度和湿度。 - MQ-135空气质量传感器:主要检测空气质量指数,包括有害气体浓度。 - MQ-2可燃气体检测传感器:用于检测房间内的易燃气体浓度,如瓦斯、天然气泄漏。 3. TFT_LCD液晶显示系统:将收集到的环境数据和系统状态实时显示给用户观看,使用户可以直观地了解当前室内空气状况。 4. 继电器:用于控制房间内通风换气设备的开关,以执行必要的通风或排风操作。 5. 执行机构:指通风设备、加湿装置等,它们通过继电器接收到来自单片机的指令后进行工作。 6. 按键开关:用户可以通过按键开关来手动控制执行机构的启停,实现手动控制通风换气的功能。 系统的工作流程为: 当传感器模块检测到温度、湿度或空气质量指数超标时,相应的数据会被发送到STM32单片机。单片机分析这些数据后,如果环境质量不达标,会立即通过继电器控制开启通风换气设备进行排风或调节室内空气。同时,这些数据也会通过TFT_LCD液晶显示系统显示出来。当环境质量达标后,系统发送停止信号,执行机构停止工作。 系统的优点是能够自动监测和调节室内空气质量,减少人工干预,提高居住舒适度。系统还可以通过按键手动控制通风换气,增加了使用的灵活性。 本设计针对的主要是民用建筑的智能通风换气系统,其控制功能结构框图如图1所示。在实际应用中,该系统能够有效地提高居住环境的空气质量,为人们提供一个健康、绿色的居住环境。 从硬件设计的角度看,单片机最小系统的设计至关重要,它主要包括电源电路、振荡电路以及复位电路部分。电源电路为单片机以及传感器模块提供稳定的工作电压,确保系统正常运转。振荡电路为单片机提供时钟信号,使其能够按照预定的频率运行。复位电路则确保单片机在上电或者出现异常时能够复位到初始状态,保证系统能够重新启动和运行。 在设计时,还需要考虑系统的稳定性和可靠性,确保在各种环境条件下都能稳定运行。比如,电源电路要设计有适当的滤波和稳压措施,以抵御电网波动对系统的影响。同时,单片机程序中应包含错误处理和异常检测机制,以便在传感器失效或数据异常时能够及时采取措施。 系统的用户界面设计应简洁易懂,方便用户进行手动控制和查看状态信息。液晶显示屏应选择清晰度高、反应快的产品,以提供良好的用户体验。 以上就是对“基于STM32的智能通风换气系统设计”的详细解读,通过上述知识点,我们可以了解到系统设计的背景、目的、主要构成部件、工作流程以及硬件设计的关键点,并对如何提高系统的稳定性和用户界面友好性有了初步的认识。
2025免费毕设附带论文 SpringBoot+Vue.js 启动教程: https://www.bilibili.com/video/BV11ktveuE2d/?share_source=copy_web 二开教程:https://www.bilibili.com/video/BV18i421i7Dx/?share_source=copy_web 讲解视频:https://www.bilibili.com/video/BV1Tb421n72S/?share_source=copy_web
python fastapi + react, 写一个图片 app
内容概要:本文详细介绍了如何利用遗传算法(GA)优化径向基函数(RBF)神经网络的权值训练,以解决传统训练方法易陷入局部最优的问题。具体步骤包括构建RBF网络结构、定义遗传算法的染色体编码与适应度函数、进行交叉和变异操作以及设置早停机制避免过拟合。实验结果显示,相比传统的梯度下降方法,GA优化后的RBF网络在测试集上的均方误差降低了37%,并且收敛速度更快。此外,文中还提供了具体的MATLAB代码片段,帮助读者理解和实现这一优化过程。 适合人群:对机器学习尤其是神经网络和遗传算法有一定了解的研究人员和技术爱好者。 使用场景及目标:适用于需要提高非线性预测准确性的情况,如股票价格波动预测、电力负荷预测等领域。目标是通过改进权重训练方法,获得更好的预测性能。 其他说明:需要注意的是,在实际应用中要平衡好计算成本与模型精度之间的关系,同时密切监控验证集的表现以防过拟合现象的发生。
基于移动终端的花卉识别系统,开发语言为Java,使用Android Studio作为开发工具。。内容来源于网络分享,如有侵权请联系我删除。
rtmidi钢琴程序代码.zip
内容概要:本文档详细介绍了如何使用Google Earth Engine (GEE) 进行基于K-Means聚类算法的土地覆盖分类。首先,用户需要定义感兴趣区域(ROI)并绘制参考区域(如水体、植被、城市等)。接着,设置图像和分类参数,包括时间范围、云量限制、使用的波段等。然后,从Sentinel-2卫星图像中筛选符合条件的数据,并进行预处理。之后,准备用于训练K-Means模型的样本数据,并训练模型。完成训练后,将模型应用于整个图像进行聚类分类,并为每个聚类分配颜色以便可视化。最后,提供重新分类的功能以及可选的导出结果到Google Drive的方法。文档还强调了对聚类结果的解释和验证的重要性。 适合人群:具有遥感基础知识和技术背景的研究人员或工程师,尤其是那些希望利用GEE平台进行土地覆盖分类工作的用户。 使用场景及目标:①通过K-Means聚类算法实现自动化的土地覆盖分类;②结合用户自定义的参考区域来提高分类准确性;③利用GEE平台的强大计算能力处理大规模遥感数据;④学习如何调整参数以优化分类效果。 阅读建议:此资源提供了完整的从数据准备到模型应用的流程指导,建议读者仔细阅读每一步骤并根据自己的研究需求调整参数设置。此外,重点在于理解和解释聚类结果,因此建议读者结合实际地理背景知识来进行结果验证。
内容概要:本文档展示了如何利用Google Earth Engine (GEE) 平台对伊朗马什哈德市2013年至2023年期间的大气污染物(NO2、CO和PM2.5)进行数据收集、处理与可视化。定义了马什哈德市的地理范围,并从Sentinel-5P和ECMWF/CAMS获取相应污染物浓度的数据集,经过筛选、裁剪、计算均值等预处理后,以不同颜色渐变展示于地图上。最后将处理后的数据导出为GeoTIFF格式存储到Google Drive中,以便进一步的研究或应用。 适合人群:环境科学、大气科学领域的研究人员以及对遥感技术感兴趣的学者和技术人员。 使用场景及目标:①研究特定区域内长期空气质量变化趋势;②评估工业活动、交通流量等因素对城市空气污染的影响;③为制定环境保护政策提供科学依据。 其他说明:本案例使用了GEE平台强大的云服务功能,可以快速高效地处理大量时空数据,同时提供了直观的地图展示方式帮助用户理解复杂的数据信息。建议读者熟悉GEE的基本操作并掌握一定的编程技能,以便更好地利用该平台开展相关研究工作。
在电子设计领域,FPGA(Field-Programmable Gate Array)是广泛应用的可编程逻辑器件,其中Xilinx 7系列FPGA以其高性能、低功耗和广泛的市场支持而备受青睐。高速收发器GTX(Gigabit Transceiver)是Xilinx FPGA中的一种关键组件,用于实现高速数据传输。这个“FPGA Xilinx 7系列高速收发器GTX通信工程代码”涵盖了GTX收发器在实际应用中的配置、设置以及调试技术,是理解并运用GTX收发器的关键资源。 GTX收发器是Xilinx 7系列FPGA的重要特性之一,支持多种高速接口标准,如PCIe、Gigabit Ethernet、Serial RapidIO、光纤通道等,数据速率可达到6.5Gbps甚至更高。其内部结构包含多个物理层(PHY)通道,每个通道都具有发送器(TX)和接收器(RX),用于实现双向通信。 1. GTX收发器配置:在设计过程中,开发者需要通过硬件描述语言(如VHDL或Verilog)来配置GTX收发器的参数,包括时钟管理、数据编码、均衡、眼图分析等。这些设置会直接影响到信号质量和传输距离。 2. 时钟管理:GTX收发器需要精确的时钟源来保证数据同步。开发者需要关注时钟的相位对齐、频率锁定以及抖动管理。Xilinx提供了一套完整的时钟管理工具和IP核,如PLL(Phase-Locked Loop)和DLL(Delay-Locked Loop)来实现这一目标。 3. 数据编码:GTX支持8b/10b、64b/64b等多种编码方式,用于检测和纠正传输错误。8b/10b编码是一种常见的线码方式,它将8位数据编码为10位,同时提供DC平衡和错误检测功能。 4. 平衡与均衡:GTX收发器内置了自适应均衡器,可以根据传输通道的特性进行调整,以补偿信号损失和失真,保持信号质量。 5. 接收器(RX)功能:RX部分包括均衡器、时钟数据恢复(CDR)、眼图监测等功能。RX需要对输入信号进行噪声过滤、相位调整,以确保正确地解码数据。 6. 发送器(TX)功能:TX部分负责将数字数据转换为模拟信号,并通过输出驱动器发送出去。TX的性能直接影响到信号的发射质量,需要根据传输媒介的特性进行优化。 7. 调试与测试:在实际工程中,开发者需要对GTX收发器进行详尽的测试和调试,包括眼图分析、误码率测试、抖动分析等,以确保系统满足性能要求。 通过学习和理解这个“FPGA Xilinx 7系列高速收发器GTX通信工程代码”,工程师可以深入了解GTX的配置、工作原理,以及如何在实际项目中有效利用它,提高高速数据传输系统的性能和稳定性。这个压缩包中的文件很可能是具体的代码实例、配置文件或测试脚本,有助于开发者深入实践和掌握GTX收发器的使用。
《单片机原理及应用》1-14章课后习题答案(第四版张毅刚) 内容概要:该文档为《单片机原理及应用》(第四版,张毅刚编著)的课后习题答案,涵盖了单片机的基本概念、内部结构、指令系统、中断系统、定时器/计数器、串行通信、I/O扩展、D/A与A/D转换、接口技术、电机控制、抗干扰技术及系统设计等方面的知识。每章的习题包括填空、单选、判断、简答和编程题,帮助读者巩固理论知识并提高实践能力。文档详细解答了各章节的思考题及习题,确保读者能全面理解单片机的工作原理及其应用。
内容概要:本文详细介绍了光伏功率转换系统(光伏PCS)中的储能双向功率换流器,涵盖双向DC/DC换流器和3 Level逆变器的工作原理和技术特点。文中不仅解释了这两种关键技术的作用,还探讨了并网和离网模式下的仿真和源码控制逻辑。此外,提供了原理图PDF和相关参考文档,帮助读者深入了解系统的组成和运行机制。最后,通过代码片段展示了实际应用中的控制算法和调制策略,强调了这些技术在光伏系统高效稳定运行中的重要性。 适合人群:从事光伏系统设计、开发和维护的专业技术人员,以及对光伏技术和储能系统感兴趣的科研人员。 使用场景及目标:适用于希望深入了解光伏PCS和储能双向功率换流器工作原理的研究人员和技术人员,旨在提升他们对该领域的理论认知和实际操作能力。 其他说明:尽管实物已不在,但丰富的资料和详细的解析仍为学习和研究提供了坚实的基础。
内容概要:本文深入探讨了七自由度整车独立悬架振动仿真模型,旨在提升车辆舒适性和操控性。文章首先介绍了模型的背景及其重要性,随后详细解释了模型的工作原理和实现步骤。通过输入悬架控制力和路面不平度数据,模型能够模拟并输出车身的振动曲线、俯仰角和侧倾角。此外,文中还提供了具体的实现过程和技术细节,包括示例代码和详细的说明文档,帮助读者更好地理解和应用该模型。 适合人群:汽车工程领域的研究人员、工程师以及对车辆动力学感兴趣的学者。 使用场景及目标:①用于研究和优化车辆悬挂系统的设计;②评估不同路况下车辆的动态响应;③作为教学材料,辅助学生和工程师学习和掌握悬架系统的仿真技术。 其他说明:该模型不仅提供了数据的可视化展示,还附带了丰富的学习资源,便于读者结合实际案例进行深入学习和研究。