小编dav*_*tto的帖子

ANTLR语法中的无限递归

我写一个简单的语法来识别一些表达.在这里,我发布了一个更简单的版本,我写的只是为了简化我的解释.这个更简单的版本可以识别如下表达式:

  1. 这是一篇文章
  2. [n]这是另一个文本[/ n]
  3. [n] [n]这是一个复合表达式[/ n] [/ n]

我的问题是当我总结一个表达式时:[i]这应该只生成一个识别异常[/ n]

抛出一个识别异常,但是解析器进入infinte递归,因为它匹配'[',但是当它与'i'匹配时,它就会丢失.我认为这种情况正在发生,因为我的语法文本组件不能包含方括号.所以,我发布了语法.

grammar ErrorTest;

expression
    :    rawText EOF
    |    command EOF
    ;

rawText
    :    word+
    ;

word
    :    ESPACE* TEXT ESPACE*
    ;

command 
    :    simpleCommand
    |    compoundCommand
    ;

simpleCommand
    :    HELP
    ;

compoundCommand
    :    rawText
    |    BEGIN compoundCommand END
    ;

HELP   : '[help]';

BEGIN  : '[n]';
END    : '[/n]';

ESPACE : ' ';
TEXT   : ~(' '|'['|']')*;
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

java recursion parsing antlr

6
推荐指数
1
解决办法
582
查看次数

如何在ANTLR中迭代生产

让我们假设使用2个ANTLR语法的以下场景:

1)

expr     : antExp+;
antExpr  : '{' T '}' ;
T        : 'foo';
Run Code Online (Sandbox Code Playgroud)

2)

expr     : antExpr; 
antExpr  : '{' T* '}' ;
T        : 'bar';
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都需要知道如何迭代antExp +和T*,因为我需要为它们的每个元素生成一个ArrayList.当然我的语法更复杂,但我认为这个例子应该解释我需要什么.谢谢!

java production parsing antlr rules

5
推荐指数
1
解决办法
597
查看次数

如何忽略ExtJS数据模型中的空字段?

我的问题很长......所以,请耐心等待:)

我正在使用ExtJS 4中的模型,但是我在关联方面遇到了一些问题,因此我创建了一个函数来为我执行自动模型创建.让我们假设我需要解析以下JSON:

{ 
    "success": true, 
    "total": 28, 
    "itens": [{
        "id":1,
        "nome":"ACRE",
        "sigla":"AC",
        "pais":{
            "id":31,
            "nome":"BRASIL",
            "sigla":"BR"
        }
    },{
        "id":2,
        "nome":"ALAGOAS",
        "sigla":"AL",
        "pais":{
            "id":31,
            "nome":"BRASIL",
            "sigla":"BR"
        }
    }, ...]
}
Run Code Online (Sandbox Code Playgroud)

itens代表省份(巴西葡萄牙语的Estados),其中有一个国家(巴西葡萄牙语País).我试图使用ExtJS关联,但我认为它就像Java关系一样,我错了.好吧,对于这个JSON,我有这些Java类和这些Ext模型(模型也是使用提供的函数创建的).

Pais.java

@Entity
// named queries here...
public class Pais implements Serializable {

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @NotEmpty
    @Length( max = 100 )
    private String nome;

    @NotNull
    @NotEmpty
    @Column( unique = true )
    @Length( min = 2, max = 4 )
    private String sigla;

    // getters, setters, equals, …
Run Code Online (Sandbox Code Playgroud)

javascript extjs models extjs4.1

5
推荐指数
1
解决办法
6564
查看次数

有没有办法避免Java的awkard对象转换语法?

例如,我有一个Object"假装" String:

Object o = new String("dsadsa");
Run Code Online (Sandbox Code Playgroud)

如果我想使用该对象的String函数,首先我必须将它转换为如下字符串:

((String)o).indexOf("sad");
Run Code Online (Sandbox Code Playgroud)

当有这么多括号时,这变得非常烦人且难以理解!特别是当它必须进入IF语句或函数时!

if (((String)o).equals("dsadsa")) {}
Run Code Online (Sandbox Code Playgroud)

避免这种情况的最佳方法是什么?

java syntax casting

3
推荐指数
4
解决办法
898
查看次数

如何在Java EE 6中通过EL检索上下文参数?

可能重复:
JSF 2 - 如何使用JSF EL从web.xml获取上下文参数值?

我习惯于以这种方式使用EL检索上下文参数

${applicationScope.configs.parameterName}
Run Code Online (Sandbox Code Playgroud)

而且效果很好.

现在,我正在使用Tomcat 7和Java EE 6(servlet和jsp规范)的新项目,上面的例子不起作用.我创建了web.xml只是为了设置一些参数.在servlet中,我只是使用

getServletContext().getInitParameter( "parameterName" );
Run Code Online (Sandbox Code Playgroud)

并且它工作正常,但是当我尝试在我的JSP中使用第一个示例时,它不起作用,没有任何反应,就像"configs"映射不存在一样.我已经搜索了一些解决方案,但我没有找到任何东西.我尝试了几件事:

${applicationScope.initParameter.parameterName}
${applicationScope.initParameters.parameterName}
Run Code Online (Sandbox Code Playgroud)

它也不起作用.我想知道如何使用Tomcat 7(Java EE 6)在我的JSP中检索上下文参数.

java jsp servlets el java-ee-6

2
推荐指数
1
解决办法
5742
查看次数

权限被拒绝错误开发C++

当我尝试在DEV C++中再次编译C代码时,该工具会给出以下错误.如果我尝试在新文件中复制相同的代码它工作正常,但我再次无法编译新代码,需要再次复制到另一个文件.

 Permission denied  ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

c dev-c++

0
推荐指数
1
解决办法
5444
查看次数

标签 统计

java ×4

antlr ×2

parsing ×2

c ×1

casting ×1

dev-c++ ×1

el ×1

extjs ×1

extjs4.1 ×1

java-ee-6 ×1

javascript ×1

jsp ×1

models ×1

production ×1

recursion ×1

rules ×1

servlets ×1

syntax ×1