AnTLR4中的ParseTree C#
我目前正在使用Antlr4定位C#创建语法,但在开发访客时我面临问题.我找不到书中提到的parsetree. 在书中我们有: LabeledExprLexer lexer = new LabeledExprLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); LabeledExprParser parser = new LabeledExprParser(tokens); ParseTree tree = parser.prog(); // parse but I can't see the equivalent C# code. 你能帮忙吗? 解决方案 C#中的接口具有前缀I.这里的完全资格的名称是Antlr4.Runtime.Tree.IParseTree.
0 2024-02-27
编程技术问答社区
ANTLR4显示任意ParseTree的API
antlr4的当前测试物工具支持-GUI选项,以图形方式解析整个输入文件,并以图形方式显示整个结果.我们是否有可能首先获取解析树,对其进行修改并调用一些API以图形方式显示Parse树的子集/子树. 我的输入源文件很大,无法查看由Testrig显示的标准解析树.更重要的是,我想滤除很多无关紧要的语法,并专注于验证我需要测试的语法.但是很难从Testrig提供的标准巨大解析树中找到一小部分信息. 解决方案 您可以致电编辑:下一个版本还包括一个更新,如果整个树不合适,则可以专注于子树.
0 2024-02-27
编程技术问答社区
从ANTLR解析树得到Python AST?
我找到了一个 antlrv4 python3 grammer 许多无用的节点. 我正在寻找一个已知的包装来从那棵解析树中获得python ast. 存在类似的东西吗? 编辑:有关使用Python的澄清ast软件包:我的项目在Java中,我需要解析Python文件. 编辑2:作者:'ast'我的意思是 http://docs.python.org/2/reference/grammar.html . 解决方案 以下可能是一个开始: public class AST { private final Object payload; private final List children; public AST(ParseTree tree) { this(null, tree); } private AST(AST ast, ParseTree tree) { thi
0 2024-02-27
编程技术问答社区
antlr3-生成一个解析树
我在找出Antlr3 API时遇到了困难,因此我可以在某些JavaScript代码中生成并使用解析树.当我使用Antlrworks(其IDE)打开语法文件时,解释器能够向我展示解析树,甚至是正确的. 我在追踪如何使用Antlr3运行时在我的代码中获取该解析树的资源遇到很多困难.我一直在运行时和解析器文件中的各种功能乱七八糟,但无济于事: var input = "(PR=5000)", cstream = new org.antlr.runtime.ANTLRStringStream(input), lexer = new TLexer(cstream), tstream = new org.antlr.runtime.CommonTokenStream(lexer), parser = new TParser(tstream); var tree = parser.query().tree; var nodeStream = new org.antlr.runtime.t
2 2024-02-27
编程技术问答社区
从CYK算法生成解析树的步骤(自然语言处理)
我目前正在从事一个涉及NLP的项目.我已经在Jurafsky和Martin中实现了CKY标识符(第450页的算法).如此生产的表实际上将非终端存储在表中(而不是通常的布尔值).但是,我唯一遇到的问题是检索解析树. 这是我的CKY标识符的说明: 这是我的语法 S -> NP VP S -> VP NP -> MODAL PRON | DET NP | NOUN VF | NOUN | DET NOUN | DET FILENAME MODAL -> 'MD' PRON -> 'PPSS' | 'PPO' VP -> VERB NP VP -> VERB VP VP -> ADVERB VP VP -> VF VERB -> 'VB' | 'VBN' N
10 2024-01-23
编程技术问答社区
解析树和抽象语法树(AST)之间有什么区别?
它们是由编译过程的不同阶段产生的吗?还是它们只是同一件事的不同名称? 解决方案 这是基于此示例的语法: grammar Expr002; options { output=AST; ASTLabelType=CommonTree; // type of $stat.tree ref etc... } prog : ( stat )+ ; stat : expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^('=' ID expr) | NEWLINE -> ; expr : multExpr (( '+'^ | '-'^ ) multExpr)* ; multExpr : atom ('*'^ atom)* ; atom
以编程方式将eObject添加到解析树中
这是我的语法的快照: Sort: name=ID ; Variable name=ID ':' type=[Sort] 我的要求是让预定义的排序让我们称之为 loc .用户无需定义这种定义,因此,当用 loc 类型定义a 变量时,Xtext应自动将其引用到我的预定义排序中.如何启动该程序,以便在开始生成排序实例?我已经在我的验证器类中使用了工厂方法" createSort",但无用. 解决方案 您使用CreateSort Factory方法的直觉很好,但您必须在正确的时间调用它. loc 实例必须在链接步骤之前创建.为此,您必须绑定自定义链接器并覆盖它. public class CustomLinker extends LazyLinker { @Override protected void beforeModelLinked(EObject model, IDiagnosticConsumer diagnost
8 2023-12-24
编程技术问答社区
在Python中为规则生成树
我想使用TKINTER绘制像结构的树一样,以获取以下数据: S--->NP VGF NP VGNF NP--->N_NNP_O_M VGF--->V_VM_VF NP--->N_NNP_S_F VGNF--->V_VM_VNF V_VM_VF--->എത്തി N_NNP_S_F--->സീതയെ V_VM_VNF--->കാണാന്‍ N_NNP_O_M--->രാമൻ 这是单个句子的CFG规则,它写在文件中. 如何以Python中的树的形式查看这些规则?那是解析树. 如何使用gui中的tkinter绘制树. 任何帮助或任何提示都将不胜感激. 解决方案 如果是的,您是否有解析器. 我认为你有语法,但没有解析器. 如果是.....然后使用解析器生成器制作解析器. 要制作解析器,您必须将Grammer给发电机... 得到解析树后.它易于在GUI中绘制树
2 2023-10-26
编程技术问答社区
对CFG语法规则进行分句分组
为每个句子生成了指定规则.我们必须为每个句子分组.输入已在文件中.输出也应在文件中 sentenceid=2 NP--->N_NNP NP--->N_NN_S_NU NP--->N_NNP NP--->N_NNP NP--->N_NN_O_NU VGF--->V_VM_VF sentenceid=3 NP--->N_NN VGNF--->V_VM_VNF JJP--->JJ NP--->N_NN_S_NU NP--->N_NN VGF--->V_VM_VF sentenceid=4 NP--->N_NNP NP--->N_NN_S_NU NP--->N_NNP_O_M VGF--->V_VM_VF 上面包含输入的部分,实际上是每个句子的语法.我想明智地将相邻的规则句分组.输出应像下面. sentenceid=2 NP--->N_NNP N_NN_S_NU N_NNP N_NNP N_NN_O_NU VGF--->V_VM_VF sentenceid=3 N
10 2023-10-26
编程技术问答社区
NLTK的树形数据结构,找到一个节点,它的父辈或子辈
我正在使用NLTK的树数据结构与Parsetree字符串一起使用. from nltk.tree import Tree parsed = Tree('(ROOT (S (NP (PRP It)) (VP (VBZ is) (ADJP (RB so) (JJ nice))) (. .)))') 但是,数据结构似乎受到限制. 是否可以通过其字符串值获取节点,然后导航到顶部或底部? 例如,假设您想获得带有字符串值的节点'nice',然后看看它的父母,孩子等是什么,可以通过NLTK的树实现吗? 解决方案 对于NLTK 3.0,您要使用parentedtree子类. .parentedtree 使用您给出的示例树,创建一个parentedtree并搜索所需的节点: from nltk.tree import ParentedTree ptree = ParentedTree.fromstring('(ROOT (S (NP (PRP It)) \
22 2023-10-26
编程技术问答社区
如何将令牌流变成解析树
我有一个从输入中从输入中流出的令牌的L​​exer构建,但我不确定如何在过程中构建下一步 - 解析树.任何人都有关于如何实现这一目标的好资源或示例吗? 解决方案 我真的会推荐对于像JavaScript这样的简单语言,滚动递归下降解析器并不难,但是使用Yacc或antlr等工具几乎总是更容易. 我认为要回到问题的基础上,您真的想研究BNF式的语法语法并为您的目标选择语法.如果有的话,解析树应该有点掉下来,是该语法的"实例"表现. 另外,不要试图将解析树的创建变成最终解决方案(例如生成代码或什么).它似乎是可行的,更有效的;但是,总是会有一段时间,您真的希望自己拥有那棵解析树. 其他解决方案 您应该研究平台的解析器生成器工具.解析器生成器允许您为您的语言指定无上下文的语法.该语言由许多规则组成,这些规则将一系列符号"将""减少"到一个新符号中.您通常还可以为不同规则指定优先级和关联性,以消除语言中的歧义.例如,一种非常简单的计算器语言可能看起来像这样: %l
10 2023-10-23
编程技术问答社区
语境自由语法的解析树
我试图弄清楚如何正确进行解析树,以表明语法是否模棱两可. 我的语法是S-> XSY | ysx | SS | E 任何帮助都会很棒.预先感谢 下面是我的裂缝... S / \ / \ x y / \ / \ x x y y 解决方案 作为提示,几乎所有具有形式生产的语法 S→SS 将是模棱两可的,因为如果您想产生三个S非终端,则可以通过两种方式进行: S S / \ / \ S S S S / \ / \ S S S S 假设这些S实际上可以产生终端字符串,则可以将这两个"小工具"放入解析树中,以两种不同的方式得出相同的字符串. 希望这会有所帮助!
2 2023-10-20
编程技术问答社区
获取R中预定义函数的解析树
我觉得这是一个相当基本的问题,但我无法弄清楚. 如果我在r中定义了一个函数,则如何使用该函数的名称来获取其解析树.我不能只使用substitute,因为这只会返回其参数的解析树,在这种情况下,只有函数名称. 例如, > f substitute(f) f 我应该如何使用其名称访问函数的解析树?例如,我如何在不明确写出整个功能的情况下获得substitute(function(x){ x^2 })的值? 解决方案 我不确定哪个符合您的欲望: eval(f) #function(x){ x^2 } identical(eval(f), get("f")) #[1] TRUE identical(eval(f), substitute( function(x){ x^2 }) ) #[1] FALSE deparse(f) #[1] "function (x) " "{"
4 2023-10-05
编程技术问答社区
用StanfordNLP解析命令句有可能获得更好的结果吗?
我想在句子结构中找到模式.因此,我正在尝试将解析树作为预处理. 到目前为止,我使用了斯坦福·科伦普尔(Stanford Corenlpparser). 我的许多句子都是当务之急. 在收到我预期的群集的更多簇之后,我审查了解析树,发现我的命令句子开始时通常将动词解析为名词短语(NP). 我找到了以下答案: 由于这个答案是从2016年开始的,我希望可能还有另一种选择来获得更好的结果. 句子中只有小写的每个第一个单词看起来不像理想的解决方案. 我包括一些解析错误的示例: (ROOT (S (S (NP (NNP View)) (NP (NP (DT a) (NN list)) (PP (IN of) (NP (JJ ongoing) (NNS sales) (NNS quotes))) (PP (IN for) (NP (DT the) (NN customer))))) (. .))) (ROOT (NP (NP (NN Request) (NN approval
6 2023-09-28
编程技术问答社区
如何在斯坦福CoreNLP中获得短语标签?
如果我想获得每个单词对应的短语标签,我如何得到这个? 例如: 在这句话中, 我的狗也喜欢吃香肠. 我可以在斯坦福NLP中获得一棵解析树,例如 (ROOT (S (NP (PRP$ My) (NN dog)) (ADVP (RB also)) (VP (VBZ likes) (NP (JJ eating) (NN sausage))) (. .))) 在上述情况下,我想获取像 一样对应每个单词的短语标签 (My - NP), (dog - NP), (also - ADVP), (likes - VP), ... 有什么方法可以简单提取短语标签? 请帮助我. 解决方案 //I guess this is how you get your parse tree. Tree tree = sentAnno.get(TreeAnnotation.class); //The children of a Tree annotation is
34 2023-09-28
编程技术问答社区
斯坦福NLP解析树格式
这可能是一个愚蠢的问题,但是如何通过解析树迭代作为NLP解析器的输出(例如Stanford NLP)?都是嵌套的支架,既不是array也不是dictionary或我使用过的任何其他收集类型. (ROOT\n (S\n (PP (IN As)\n (NP (DT an) (NN accountant)))\n (NP (PRP I))\n (VP (VBP want)\n (S\n (VP (TO to)\n (VP (VB make)\n (NP (DT a) (NN payment)))))))) 解决方案 Stanford Parser的此特定输出格式称为"括号(Tree)".它应该被读成 的图 单词为节点(例如,AN,会计师) 短语/子句作为标签(例如S,NP,VP) 边缘在层次上链接, 通常,解析的顶部或根节点是幻觉ROOT (在这种情况下,您可以将其读取为有
10 2023-09-28
编程技术问答社区
Boost::Spirit::Qi自动规则--避免重复复制AST数据结构
我一直在使用Qi和Karma对几种小语言进行一些处理.大多数语法很小(20-40规则).我几乎能够仅使用自动图像,因此我的解析树完全由变体,结构和STD :: vectors组成. 此设置非常适合常见情况: 1)解析某物(Qi), 2)对解析树(访客)进行较小的操纵, 3)输出一些东西(业力). 但是,我担心如果我想对语法树进行复杂的结构更改会发生什么,例如将大型子树移动.考虑以下玩具示例: 使用自动图的S-Expr-Style逻辑表达式的语法... // Inside grammar class; rule names match struct names... pexpr %= pand | por | var | bconst; pand %= lit("(and ") >> (pexpr % lit(" ")) >> ")"; por %= lit("(or ") >> (pexpr % lit(" ")) >> ")"; pnot %=
18 2023-08-20
编程技术问答社区
代码的行分析器需要解析树吗?这足够了吗?
我试图确定为一种语言编写行探测器的必要条件,例如可用于Python和Matlab的语言. 一种幼稚的解释"线探测器"的方法是假设一个人可以插入每条线登录的时间,但是线的定义取决于解析器如何处理空格,这只是第一个问题.似乎需要使用解析树并插入各个节点周围的时间. 这个结论正确吗?线剖面是否需要解析树,并且是所有需要的(超越时间记录)吗? 更新1:为此提供赏金,因为问题仍未解决. 更新2:这是一个众所周知的链接还要注意,可以说手动装饰输入代码会消除对解析树的需求,但这不是自动剖面. 更新3:尽管这个问题是语言不可知论,但这是因为我正在考虑为R创建这样的工具(除非存在并且我还没有找到它). 更新4:关于使用行探索器与呼叫堆栈profiler的使用 - 解决方案 我会说是的,您需要一棵解析树(和源) - 您还如何知道什么构成"行"和有效的语句? 实用的简化可能是"说明阶级",而不是"线探查器". 在R中,容易获得解析树:body(theFunction
14 2023-06-27
编程技术问答社区
如何读取基于选区的解析树
我有一系列句子,这些句子由斯坦福的例如: (ROOT (FRAG (NP (NN sent28)) (: :) (S (NP (NNP Rome)) (VP (VBZ is) (PP (IN in) (NP (NP (NNP Lazio) (NN province)) (CC and) (NP (NP (NNP Naples)) (PP (IN in) (NP (NNP Campania)))))))) (. .))) 原始句子是: sent28: Rome is in Lazio province and Naples in Campania . 我应
26 2023-05-20
编程技术问答社区