是否可以将从文本文件检索到的终端追加到Rascal中的词典中?这会在运行时发生,我看不出有什么明显的方式来实现这一点。我宁愿将数据与Rascal项目分开。例如,如果我从文本文件中读取了国家/地区列表,我如何将它们添加到词典(使用关键字lexical
)?将文本文件附加到Rascal中的词典
0
A
回答
1
在数据相关版本的Rascal解析器中,这更容易和更快,但我们还没有发布。现在我会写一个通用的规则与解析后的过滤器,像这样:
rascal>set[str] lexicon = {"aap", "noot", "mies"};
set[str]: {"noot","mies","aap"}
rascal>lexical Word = [a-z]+;
ok
rascal>syntax LexiconWord = word: Word w;
ok
rascal>LexiconWord word(Word w) { // called when the LexiconWord.word rule is use to build a tree
>>>>>>> if ("<w>" notin lexicon)
>>>>>>> filter; // remove this parse tree
>>>>>>> else fail; // just build the tree
>>>>>>>}
rascal>[Sentence] "hello"
|prompt:///|(0,18,<1,0>,<1,18>): ParseError(|prompt:///|(0,18,<1,0>,<1,18>))
at $root$(|prompt:///|(0,64,<1,0>,<1,64>))
rascal>[Sentence] "aap"
Sentence: (Sentence) `aap`
rascal>
因为filter
功能去掉了所有可能的派生为hello
,解析器最终返回上hello
解析错误。它不适用于词库中的aap
,因此欢呼。当然,你可以用这种过滤方式做出有趣复杂的派生。人们有时会写出含糊不清的语法,并使用像这样的过滤器来使其明确无误。
如果滤波函数处于摊销常量时间,则以这种方式进行解析和过滤,就输入长度而言,以立方最坏情况时间为单位。如果语法是线性的,那么整个过程当然也是线性的。
0
完全不同的答案是动态更新语法并从中生成解析器。这涉及到对流氓的内部语法表示像这样工作:
set[str] lexicon = {"aap", "noot", "mies"};
syntax Word = ; // empty definition
typ = #Word;
grammar = typ.definitions;
grammar[sort("Word")] = { prod(sort("Word"), lit(x), {}) | x <- lexicon };
newTyp = type(sort("Word"), grammar);
这NEWTYPE是一个具体化的语法+型的词汇的定义,并且其现在可以使用像这样:
import ParseTree;
if (type[Word] staticGrammar := newType) {
parse(staticGrammar, "aap");
}
现在已经写人本,两件事情:
- 我想,这可能会引发未知的错误,因为我们没有测试动态分析器生成,
- 对于具有合理大小的词典,由于解析器针对编程语言中的关键字进行了优化,而不是大型词典,因此这将生成极慢的解析器。
相关问题
- 1. 文本文件词典Java
- 2. 附加到文本文件
- 3. Python - 将文本文件中的单词匹配到词典和操作值
- 4. 将文件附加到PHPMailer
- 5. 将json文件附加到文本文件
- 6. 如何在Python中将文本文件加载到字典中?
- 7. 从.txt文件到词典
- 8. 将PDF文件附加到邮件中
- 9. 将新值附加到文本文件列表中
- 10. 使用PrintStream附加到文本文件
- 11. 使用WriteAllLines附加到文本文件
- 12. 如何将文本文件附加到java中的现有zip文件?
- 13. 将文本文件附加到电子邮件
- 14. 将XHTML文件中的PDF文件附加到电子邮件
- 15. 如何将词典字典转换为Ansible vars文件中的词典列表?
- 16. 将CSS文件附加到javascript到单个.js文件中
- 17. 箭头→将字符附加到.bat脚本中的文件
- 18. 将换行符附加到shell脚本中的输出文件
- 19. Java将新文件的数据附加到旧文件中
- 20. 如何将文件附加到现有文件中的mongodb
- 21. 将div附加到文本区域?
- 22. Perl将文本附加到新行
- 23. 将文本附加到元素值
- 24. 将文本附加到标签tkinter
- 25. Ajax - 将值附加到文本字段
- 26. 将文本附加到TextArea(JavaFX 8)
- 27. jquery没有将文本附加到texarea
- 28. 将表单值附加到文本框
- 29. 将文件附加到邮件
- 30. 将文件附加到电子邮件
何时可以访问数据相关版本? – rien333
不清楚的想法。这个流氓项目有大量积压,我们现在正在处理其他优先事项。 – jurgenv
虽然你可以尝试iguana或meerkat解析与数据依赖,请参阅github。 – jurgenv