欧姆 - 构建解析器,口译员,编译器等的库和语言。

2021-03-28 22:20:19

欧姆是一个由库和特定于域的语言组成的解析工具包。您可以使用它来解析自定义文件格式或快速构建用于编程语言的解析器,解释器和编译器。

欧姆语言基于解析表达式语法(PEGS),这些语法(PEG)是描述语法的正式方式,类似于正则表达式和上下文 - 自动汇率。欧姆库提供了一个JavaScript接口,用于从您编写的语法创建解析器,解释器,和何间。

完全支持左递归规则意味着您可以自然地定义左关联运算符。

模块化语义行动。与许多类似的工具不同,欧姆完全来自语义行动的语法。这种分离改善了模块化和可扩展性,并使语法和语义行动更易于阅读和理解。

在线编辑器和Visualizer。欧姆编辑器提供即时反馈和交互式可视化,使整个执行解析器可见和有形。它' ll让你觉得你有超级大国。 💪

基于浏览器的工具,将写入的Konnakkol(南印度声音打击乐艺术)转变为音频。

通配符,浏览器扩展,使任何人修改网站以满足自己的特定需求,使用欧姆为其电子表格公式。

使用欧姆开始的最简单方法是使用交互式编辑器。或者,您可以在jsfiddle上使用以下示例之一:

下载ohm.js(开发版本,具有完整源和注释)或ohm.min.js(用于更快页面加载的缩小版本)。

将新脚本标记添加到页面,并将SRC属性设置为刚才下载的文件的路径。例如。:

这将在本地node_modules文件夹中安装ohm。使用要求从节点脚本访问它:

要使用欧姆,您需要一种以欧姆语言编写的语法。语法提供了要解析的语言或数据格式的违规。有几种不同的方式可以定义一个欧姆语法:

这是最简单的选择,但它可以尴尬地定义更大的语法。

在浏览器中运行时推荐:将语法源嵌入到自己的内部< script>标记属性类型=" text / ohm-js",使用ohm.grammarfromscriptElement()实例化它:

使用Node.js推荐:在单独的文件中定义语法,阅读文件' s内容并使用ohm.grammar(内容)实例化它:

const userInput ='你好' ; const m = mygrammar。匹配(UserInput); if(m。成功()){控制台。日志('问候,人。'); } else {console。日志("那个' s不是问候!"); }

结果是匹配对象。您可以使用成功()和失败()方法来查看输入是否识别。

ohm有两个工具来帮助您调试语法:文本跟踪和图形可视化器。

您可以在线尝试Visualizer,或者如果您在Web浏览器中拥有OHM Checkout,请在Web浏览器中打开Visualizer / index.html。

要查看语法g的文本跟踪,只需使用g.trace()方法而不是g.match。它取得了相同的参数,而不是返回火柴,而不是返回一个跟踪对象 - 调用其ToString方法返回一个字符串描述在尝试匹配输入时所做的解析器的决策。例如,这里是G.Trace(' ab')的theresult。toString()用于语法g {start = letter +}:

ab✓开始⇒" ab✓bea✓字母+⇒" ab" ab✓字母⇒" a" ab✓降低⇒" a" ab✓ Unicode [ll]字符⇒" a" b✓字母⇒" b" b✓下⇒" b"b✓unode[ll]字符⇒" B" ✗字母✗下✗unicode [ll]字符✗upper✗unode[lu]字符✗unodottmo✗unun unicode【ltmo]字符✓结束⇒""

如果您' ve写了一个欧姆语法,你' d喜欢与他人分享,看访我们的出版语法的建议。 NPM RUN Build Builds Dist / ohm.js和dist / ohm.min.js,它们是可以包含在网页中的独立捆绑包。 编辑欧姆'自己的语法(在src / ohm-grammar.cm中),运行npm运行bootstrap以重新构建ohmand测试您的更改。 在提交Pull请求之前,请务必添加测试,并确保NPM运行预付runswithout错误。