我想在我的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?
在ANTLR v4中,我们如何使用双引号转义双引号来解析这种字符串,如在VBA中?
对于文字:
"some string with ""john doe"" in it"
Run Code Online (Sandbox Code Playgroud)
目标是识别字符串: some string with "john doe" in it
是否可以将其重写为单双引号中的双倍双引号?"" -> "?
来自Codechef:
当且仅当所有字符在其中出现相同的次数时,才认为字符串是平衡的.
给你一个字符串
S; 此字符串可能只包含大写英文字母.您可以多次执行以下操作(包括零):选择一个字母S并用另一个大写英文字母替换它.请注意,即使被替换的字母S多次出现,也只会替换此字母的所选出现.找到将给定字符串转换为平衡字符串所需的最少操作数.
例:
输入:
ABCB在这里,我们可以替换
C为ATO GET:,ABAB其中字符串的每个字符出现2次.所以,最小操作次数=
1.
如何使弦好?
我可以应用动态编程吗?
我有一个字符串变量,其中有多个换行符,我想测试字符串的开头是否与正则表达式匹配.但是,当我使用该^字符时,它会匹配从每个换行符开始的文本.
我希望这匹配:
"foo\nbar" =~ /^foo/
Run Code Online (Sandbox Code Playgroud)
我希望这不匹配
"bar\nfoo" =~ /^foo/
Run Code Online (Sandbox Code Playgroud)
我找不到一个修饰符,使^(或任何其他)字符只匹配字符串的开头.任何帮助非常感谢.
问候,
我想检测一个段是否只"触摸"多边形或交叉它.
图

解释我的怀疑.如何知道案例A和B之间的区别?请注意,在这两种情况下,红线在两个顶点中穿过多边形,一个在外面触摸,另一个在内部交叉.我有一个段段交叉算法,但我不知道如何正确使用它.任何帮助表示赞赏.
我想要一个红宝石正则表达式匹配十六进制灰度颜色.
所以它会匹配
#000000
#ababab
#ffffff
Run Code Online (Sandbox Code Playgroud)
但不是
#ccddcc
#afafa0
Run Code Online (Sandbox Code Playgroud)
等等
有一些计算功率集的解决方案,但我在谷歌上找到的这些并没有按顺序给出功率设置,我需要它.例如,如果我想要(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)
由于元素的数量可能非常高,因此无法计算整个功率集并在之后对其进行排序.
有人有点想法吗?
我有一种语言,基本上是将列映射到数组中的新结构.该语言旨在让产品经理定义映射,而无需了解大量编程细节.我相信这里还有很多需要改进的地方,但这就是我所拥有的.
这种语言主要起作用.我遇到的问题是条件语句.
我的解析器有以下规则:
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列表,但这个问题并没有得到很好的回答,很可能是因为它对他们来说似乎很明显.
我愿意发布完整的语法但是已经把它留下来保持这个简短.
我正在尝试使用pegjs制作解析器.我需要解析类似的东西:
blah blah START Lorem ipsum
dolor sit amet, consectetur
adipiscing elit END foo bar
etc.
Run Code Online (Sandbox Code Playgroud)
我有麻烦写作规则来从捕捉文本"START"来"END".
我正在学习ANTLR4,而且我以前没有解析器生成器的经验.
当我定义自己的访问者实现时,我必须覆盖BaseVisitor的方法(我正在寻找本书第40页的EvalVisitor类的实例).如果我的方法实现可能抛出异常,我该怎么办?我不能使用已检查的异常,因为原始方法有一个空的throws子句.我希望使用未经检查的例外吗?(这似乎是一个糟糕的Java设计).例如,假设在EvalVisitor类中我希望方法visitId(页面41)抛出用户定义的异常,比如UndefinedId,而不是返回0.我应该如何编写代码?