问题标签 [jison]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - Jison/Bison 获取语法中标记的行号
我想知道如何在语法中获取标记的行号。假设我有以下语法:
如何获取 MINUS 令牌的行号?我没有在 jison 中使用词法分析器,而是通过覆盖词法分析器从 lex 文件中传递它:
我意识到我可以调用yylineno
,但是如果语法中的不同标记具有不同的行号并且我只想要 jison 文件中特定标记的行号怎么办。也许像$1.yylineno
什么?非常感谢!
javascript - 吉森无视我的一条规则
我正在尝试使用 Jison。
这是我的语法:
当我尝试解析时,goto http://www.google.com then goto http://www.bing.com
我只会被[ 'l1', { cmd: 'goto', url: 'http://www.google.com' } ]
返回。
我期望同时返回两个 goto 命令。
对我弄清楚我的语法有什么帮助吗?
python - 如何使用 PLY 处理一个令牌的多个规则
我正在使用 jison 文件并使用 python PLY 的 lex 模块将其转换为解析器生成器。
我注意到在这个 jison 文件中,某些令牌有多个与之关联的规则。例如,对于 token CONTENT
,文件指定了以下三个规则:
COMMENT
在另一种情况下,令牌有多个规则:
当它们适用于不同的州时,区分规则似乎很容易,但是当它们适用于同一个州时呢?
如何使用 ply.lex 将此 jison 转换为 python 规则?
编辑
如果有帮助,这个 jison 文件是 handlebars.js 源代码的一部分。见:https ://github.com/wycats/handlebars.js/blob/master/src/handlebars.l
jison - 将 jison 对象转换回字符串
因此,我为搜索查询语言创建了一个 .jison 文件,该语言基本上是 SQL where 语句的子集。该文件可以在这里查看:
https://gist.github.com/ryanzec/7d1c8100d1b5f03c0a17
现在,在将字符串转换为 JSON 对象时,它可以正常工作。现在我已经阅读了文档并且在这方面找不到任何东西,但是可以获取输出的 JSON 对象并轻松地将其编译回字符串,还是我必须为此手动编写该过程?
javascript - Jison / Flex:试图在两个令牌之间捕获任何东西(。*)但有问题
我目前正在开发一个小的 dsl,与 rabl 不同。我正在努力实施我的一项规则。在我们解决问题之前,我将解释一下我的语法/语法。在我的小语言中,您可以定义属性、对象/数组块或自定义块(这些都用于构建 json 对象/数组)。“自定义块”可以是包含我的标准表达式(属性、对象/数组块等)或一些 JavaScript 的块。这些表达式是这样写的——
我遇到的问题是我的自定义脚本节点。我有一个真正难以定义的脚本令牌,以便 JISON 可以正确捕获块内的内容。在我的词法分析器中,我目前有...
该 SCRIPT 令牌基本上将匹配 (u) 之后直到(并包括)结束令牌(通常结束一个块)的任何内容。我真的不喜欢这个,因为我常用的块终止符(结束)实际上是脚本令牌的一部分,这对我来说完全是 hacky。不幸的是,我找不到更好的方法来捕捉 (..) 和结束之间的任何内容。我尝试编写一个正则表达式来捕获以“;”结尾的任何内容,但是当我的 dsl 代码中有多个脚本节点时会出现问题。我只能通过将“end”关键字作为捕获的一部分来完成这项工作。
对于解决我的问题的任何见解,我将不胜感激!如果我没有清楚地解释我的问题,请告诉我,我会尽力澄清!提前谢谢了!!
我也很乐意接受有关如何清理语法的任何建议。我对这些东西还很陌生,感觉我的东西现在一团糟:)
jison - jison 中的 %lex 和 /lex 行是什么?
下面的代码片段可以在:http: //zaach.github.io/jison/demos/calc/以及 jison 文档页面上找到。阅读 jison、lex 和 flex 文档后——我仍然不完全理解 %lex 和 /lex 语法。它是特定于 jison 扫描仪生成器的吗?意思是它提供稍后在文档中显示的 json 输出的唯一功能?我之所以问,是因为 jison 文档没有明确解释其用途,而且 flex/lex 规则似乎不允许这种语法。
javascript - 使用 Jison 将简单脚本创建/翻译成另一种语言
一直在和 Jison 一起玩,试图为一个非常简单的脚本语法创建一个“解释器”(这只是为了个人搞乱项目,没有商业案例!)
自从我不得不创建一个编译器已经过去了大约 20 年,我想我只是没有掌握一些概念。
我想做的是给 Jison 一个非常简单的语句程序,每行一个,然后返回一个 Javascript 语句流,然后执行这些操作。
我可能看错了 - 也许我需要在解析期间实际执行这些操作?不过这听起来不太对劲。
无论如何,我所拥有的是(我正在网上尝试这个http://zaach.github.io/jison/try/)
因此,对于输入:
...我想:
我得到的是:
这种获得单一结果对我来说是有意义的,但我不知道如何才能在构建输出方面取得进展。
javascript - 使用 Jison/Bison 解析字符串
我正在尝试学习如何使用 Jison(一个使用 Bison 语法的 Javascript 解析器生成器)。
我有一些看起来像这样的代码:
我正在尝试创建一个解析器,index()
如果传递了 string a
,并且blah(2, 'aba')
如果传递了 string ,它将返回b
。(本质上,我需要解析包含方法调用的字符串)。
我一直在尝试从 Jison 提供的示例中进行调整,但是由于对解析的工作原理缺乏了解,我受到了阻碍!
这是我的语法文件:
显然它还没有完成;它不识别括号。我从将这个字符串传递给解析器的简单示例开始:{{index}}
. 当我给我当前的解析器这个时,它返回}}
. 根据我对语法的(绝对错误的)理解,我希望它会返回index
.
我究竟做错了什么?
javascript - 如何将额外的输入传递给 jison 中的 `parse`?
我想解析一个字符串,但这个字符串可能包含对在运行时解析的变量的引用。理想情况下,我想将这些变量及其值的哈希值作为第二个参数传递给解析函数。
目前,我正在sed -i '' 's/parse: function parse(input) {/parse: function parse(input, in_data) { data = in_data;/' grammar.js
从grammar.jison 构建我的grammar.js 之后运行,但这似乎不是最佳解决方案。推荐的方法是什么?
在我的 jison 语法中,我有类似的东西:
在模块部分:
我希望data
在运行时传入哈希,例如:
javascript - 如何在 JISON(解析器生成器)中创建用户定义函数?
我已经完成了具有赋值功能的抽象语法树计算器但是我不知道如何完成 UDF。
我计划添加一个名为“funcasgn”的新函数,并通过定义的函数进行一些解析。
但是定义函数中的参数(名称和大小)是任意的,当用户调用函数时,解析器必须为这些参数赋值。
有任何想法吗?