草庐IT

php - 分析正则表达式词法分析器

我用PHP创建了一个路由器,它采用DSL(基于Rails3路由)并将其转换为Regex。它有可选的段(由(嵌套的)括号表示)。以下是当前的词法分析算法:privatefunctiontokenize($pattern){$rules=array(self::OPEN_PAREN_TYPE=>'/^(\()/',self::CLOSE_PAREN_TYPE=>'/^(\))/',self::VARIABLE_TYPE=>'/^:([a-z0-9_]+)/',self::TEXT_TYPE=>'/^([^:()]+)/',);$cursor=0;$tokens=array();$buffe

java - 将无效字符视为 ANTLR4 词法分析器中的单个标记

我正在使用JSONgrammarfromtheantlr4grammarrepository为编辑器插件解析JSON文件。它有效,但一个一个地报告无效字符。以下代码段导致18个词法分析器错误:{sometext-without-quotes:42}我想通过将相同类型的连续无效单字符标记视为一个更大的无效标记来将其归结为1-2。对于类似的问题,建议使用自定义词法分析器将“未知”元素粘合到较大的标记:Inantlr4lexer,Howtohavearulethatcatchesallremaining"words"asUnknowntoken?我假设这会绕过通常的词法分析器错误报告,如果可

java - 我可以使用 Antlr 创建的词法分析器/解析器来解析 PDDL 文件并将数据返回给 Java 程序吗?

我是Antlr的新手,但之前使用过Flex/Bison。我想知道我想用Antlr做的事情是否可行。我想使用Antlr解析PDDL文件,并在我编写的Java类中构建我自己的PDDL文件内容表示,该类是我在解析PDDL文件时编写的(在规则的操作中?)。文件解析完成后,我想将文件内容的对象表示返回给Java程序以运行其他操作。所以基本上,我想从Java程序内部对PDDL文件调用Antler生成的PDDL解析器,并让它向主Java程序返回一个描述PDDL文件的对象。这可能吗?我曾尝试查看文档,但没有找到好的答案。非常感谢。 最佳答案 Soe

java - 哪个面向 Java 的词法分析器用于简单项目(ANTLR、DIY 等)

我正在从事一个小型文本编辑器项目,并希望为几种语言(Java、XML..仅举几例)添加基本语法突出显示。作为一种学习体验,我想添加一个流行的或不流行的Java词法分析器。您推荐什么项目。Antlr可能是最著名的,但它看起来相当复杂和沉重。这是我所知道的选项。AntRagel(是的,它可以生成用于处理输入的Java源代码)自己动手(我想我可以编写一个简单的token解析器并突出显示源代码)。 最佳答案 ANTLR或JavaCC是我所知道的两个。我首先推荐ANTLR。 关于java-哪个面向

java - 词法语法和句法语法有什么区别?

我正在阅读Java语言规范8。我正在努力理解第2章的语法。这是我已经学到的:语义:语义学是对意义的研究。含义:在语义学中,意义被定义为外延:词/短语所指的世界中的事物,加上意图:词/短语唤起的概念/心理意象。语法:句法是关于句子的结构,以及决定哪些单词出现在何处的因素。制作:计算机科学中的产生式或产生式规则是一种重写规则,指定可以递归执行以生成新符号序列的符号替换。字母表:当一个非空集在字符串操作中的预期用途应被指明时,它被称为字母表。词位:词位是构成句法单元的字符串。句法单位:句子是“最高”(即最大)的句法单位,最低(即最小)的句法单位是单词,中间句法单元是短语。token:标记是表

c++ - 用列号 boost spirit 动态词法分析器?

我在制作跟踪列号的动态boostspirit词法分析器时遇到了问题。这可能吗?谁能提供一个简单的例子?谢谢! 最佳答案 看看这篇文章HowtouseBoost::Spirit::Lextolexafilewithoutreadingthewholefileintomemoryfirst?和http://www.boost.org/doc/libs/1_48_0/libs/wave/doc/samples.html 关于c++-用列号boostspirit动态词法分析器?,我们在Stack

c++ - boost::spirit 当词法分析器标记 > 10 时编译错误

当我尝试编译以下代码时,当token_list>10个标记时,出现编译失败(错误C2903:“应用”:符号既不是类模板也不是函数模板...)。当token#defineBOOST_VARIANT_MINIMIZE_SIZE#include#include#include#includenamespaceqi=boost::spirit::qi;namespacelex=boost::spirit::lex;templatestructtoken_list:lex::lexer{token_list(){cs1="tok1";cs2="tok2";cs3="tok3";cs4="tok4

c++ - 使用来自 Boost.Spirit 的 Lex 和 Qi 在语法规则中使用词法分析器标记属性

让我们考虑以下代码:#include#include#include#include#include#include#include#includenamespacelex=boost::spirit::lex;namespaceqi=boost::spirit::qi;namespacephoenix=boost::phoenix;structoperation{enumtype{add,sub,mul,div};};templateclassexpression_lexer:publiclex::lexer{public:typedeflex::token_defoperator_

Lex 生成一个词法分析器

 lex通过输入一个.l文件生成一个lex.yy.c文件,然后通过c编译器编译成一个可执行的词法分析器。该词法分析器扫描输入源文件,生成一个token符号流给后面语法分析器使用。 .l文件的结构,分成三个部分,声明,转换规则,自定义规则。三个部分由%%分割declarations%%translationrules%%auxiliaryprocedures声明段,包含希望出现出现再目标c文件种的代码,正则表达式的声明。符号常量的声明。%{%}包裹内容#include#include"y.tab.h"typedefchar*YYSTYPE;//符号常量声明char*yylval;/* regul

局部变量的 C++ lambda 词法闭包

总结在C++中,当我从捕获该函数局部变量的函数返回lambda时,具体会发生什么,为什么?编译器(g++)似乎允许这样做,但它给我的结果与我预期的不同,所以我不确定这在技术上是否安全/受支持。详情在某些语言(Swift、Lisp等)中,您可以在闭包/lambda中捕获局部变量,只要闭包在范围内,它们就保持有效并在范围内(我听说它称为“lambdaover在Lisp上下文中放弃lambda”)。例如,在Swift中,我尝试做的示例代码是:funccounter(initial:Int)->(()->Int){varcount=initialreturn{count+=1;returnco