小编Bar*_*ers的帖子

如何匹配ANTLR 3中固定数量的字符?

我想在我的ANTLR语法中解析ISO 8601日期.

2001-05-03
Run Code Online (Sandbox Code Playgroud)

我的语法文件中有以下条目:

date    : FOUR_DIGIT ('-')? TWO_DIGIT ('-')? TWO_DIGIT ;

FOUR_DIGIT
    : TWO_DIGIT TWO_DIGIT ; 

TWO_DIGIT
    : DIGIT DIGIT ;

DIGIT   : ('0'..'9') ;
Run Code Online (Sandbox Code Playgroud)

我知道我可以匹配一个或多个,DIGIT+零个或多个匹配DIGIT*

虽然这有效,是否有一个更简单的语法来指定我想要完全匹配2 DIGIT

grammar antlr antlr3

8
推荐指数
2
解决办法
3091
查看次数

ANTLRv4:如何读取字符串中的双引号转义双引号?

在ANTLR v4中,我们如何使用双引号转义双引号来解析这种字符串,如在VBA中?

对于文字:

"some string with ""john doe"" in it"
Run Code Online (Sandbox Code Playgroud)

目标是识别字符串: some string with "john doe" in it

是否可以将其重写为单双引号中的双倍双引号?"" -> "

antlr4

8
推荐指数
1
解决办法
4752
查看次数

如何找到使字符串平衡的最小操作次数?

来自Codechef:

当且仅当所有字符在其中出现相同的次数时,才认为字符串是平衡的.

给你一个字符串S; 此字符串可能只包含大写英文字母.您可以多次执行以下操作(包括零):选择一个字母S并用另一个大写英文字母替换它.请注意,即使被替换的字母S多次出现,也只会替换此字母的所选出现.

找到将给定字符串转换为平衡字符串所需的最少操作数.

例:

输入: ABCB

在这里,我们可以替换CATO GET:,ABAB其中字符串的每个字符出现2次.

所以,最小操作次数= 1.

如何使弦好?

我可以应用动态编程吗?

algorithm dynamic-programming

8
推荐指数
1
解决办法
6091
查看次数

仅匹配Ruby regexp中的行首

我有一个字符串变量,其中有多个换行符,我想测试字符串的开头是否与正则表达式匹配.但是,当我使用该^字符时,它会匹配从每个换行符开始的文本.

我希望这匹配:

"foo\nbar" =~ /^foo/
Run Code Online (Sandbox Code Playgroud)

我希望这不匹配

"bar\nfoo" =~ /^foo/
Run Code Online (Sandbox Code Playgroud)

我找不到一个修饰符,使^(或任何其他)字符只匹配字符串的开头.任何帮助非常感谢.

ruby regex

7
推荐指数
1
解决办法
5727
查看次数

段 - 多边形交集

问候,

我想检测一个段是否只"触摸"多边形或交叉它.

替代文字

解释我的怀疑.如何知道案例A和B之间的区别?请注意,在这两种情况下,红线在两个顶点中穿过多边形,一个在外面触摸,另一个在内部交叉.我有一个段段交叉算法,但我不知道如何正确使用它.任何帮助表示赞赏.

computational-geometry

7
推荐指数
1
解决办法
2943
查看次数

Ruby Regex匹配灰度颜色

我想要一个红宝石正则表达式匹配十六进制灰度颜色.

所以它会匹配

#000000
#ababab
#ffffff
Run Code Online (Sandbox Code Playgroud)

但不是

#ccddcc
#afafa0
Run Code Online (Sandbox Code Playgroud)

等等

ruby regex

7
推荐指数
1
解决办法
327
查看次数

如何按特定顺序获得电源设置?

有一些计算功率集的解决方案,但我在谷歌上找到的这些并没有按顺序给出功率设置,我需要它.例如,如果我想要(1,2,3,4)通用算法的电源组按以下顺序为我提供电源设置:

()
(1)
(2)
(1 2)
(3)
(1 3)
(2 3)
(1 2 3)
(4)
(1 4)
(2 4)
(1 2 4)
(3 4)
(1 3 4)
(2 3 4)
(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)

但我需要的是以下顺序:

()
(1)
(2)
(3)
(4)
(1,2)
(1,3)
(1,4)
(2,3)
(2,4)
(3,4)
(1,2,3)
(1,2,4)
(1,3,4)
(2,3,4)
(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

由于元素的数量可能非常高,因此无法计算整个功率集并在之后对其进行排序.

有人有点想法吗?

algorithm set

7
推荐指数
1
解决办法
1998
查看次数

如果那么其他条件评估

我有一种语言,基本上是将列映射到数组中的新结构.该语言旨在让产品经理定义映射,而无需了解大量编程细节.我相信这里还有很多需要改进的地方,但这就是我所拥有的.

这种语言主要起作用.我遇到的问题是条件语句.

我的解析器有以下规则:

conditionalexpr :  IF^ LPAREN! (statement) RPAREN! THEN! LCURLY! statement RCURLY! (ELSE! LCURLY! statement RCURLY!)?;
Run Code Online (Sandbox Code Playgroud)

这适用于生成有三个孩子的树.

我的问题是如果条件不允许,则避免评估语句.

天真地我做了:

conditionalexpr returns[Object o]: 
  ^(IF a=statement b=statement (c=statement)?)
  {
    $o = (Boolean)$a.o ? $b.o : $c.o != null ? $c.o : "";
  }
  ;
Run Code Online (Sandbox Code Playgroud)

显然这不起作用.

我一直在玩语法谓词,但我不能让它们正常工作.

语句当前返回一个对象.主要是语言处理字符串,但我需要支持布尔值和数字(整数和小数).

如果我添加{$ ao}之类的东西?=>我在生成的代码中得到$ a.

我已经查看了antlr-interest列表,但这个问题并没有得到很好的回答,很可能是因为它对他们来说似乎很明显.

我愿意发布完整的语法但是已经把它留下来保持这个简短.

java antlr antlr3

7
推荐指数
1
解决办法
2759
查看次数

如何用peg语法解析这个?

我正在尝试使用pegjs制作解析器.我需要解析类似的东西:

blah blah START Lorem ipsum 
dolor sit amet, consectetur 
adipiscing elit END foo bar 
etc.
Run Code Online (Sandbox Code Playgroud)

我有麻烦写作规则来从捕捉文本"START""END".

parsing peg pegjs

7
推荐指数
1
解决办法
1076
查看次数

检查访客中的例外情况

我正在学习ANTLR4,而且我以前没有解析器生成器的经验.

当我定义自己的访问者实现时,我必须覆盖BaseVisitor的方法(我正在寻找本书第40页的EvalVisitor类的实例).如果我的方法实现可能抛出异常,我该怎么办?我不能使用已检查的异常,因为原始方法有一个空的throws子句.我希望使用未经检查的例外吗?(这似乎是一个糟糕的Java设计).例如,假设在EvalVisitor类中我希望方法visitId(页面41)抛出用户定义的异常,比如UndefinedId,而不是返回0.我应该如何编写代码?

antlr4

7
推荐指数
1
解决办法
1163
查看次数