ANTLR 4并非所有令牌都被显示

时间:2014-03-24 13:40:12

标签: java antlr antlr4

这可能是一个非常明显的问题,但我似乎无法找到任何帮助。目前我有一个语法来输入简单的命令,以便稍后通过Java分解为HTML

grammar CoCodemol;
r : file;
file
  :  line*
  ;

line
  : Newtype
  | Assignment
  | Clear (LineBreak)?
  | End (LineBreak)?
  ;

Newtype
   : Types Space Num* Space? '=' Space? 'new' Space Types (LineBreak)?
   ;

Assignment
   : Num* '.' Variables Space? '=' Space? NumS* (LineBreak)?
   ;

Types
  : 'body'
  | 'div'
  | 'span'
  | 'html'
  ;

Variables
  : 'width'
  | 'height'
  | 'background'
  | 'margin'
  | 'margin-left'
  | 'margin-right'
  | 'margin-top'
  | 'margin-bottom'
  | 'padding'
  | 'padding-left'
  | 'padding-right'
  | 'padding-top'
  | 'padding-bottom'
  | 'float'
  ;

Declarations
  : 'new'
  ;

End
  : 'end' (LineBreak)?
  ;

Clear
  : 'clear' (LineBreak)?
  ;

Num : ([0-9]|'a'..'z'|'A'..'Z')+;
NumS : ([0-9]|'a'..'z'|'A'..'Z'|' ')+;



Space
  : ' '
  ;


LineBreak
  : '\r'? '\n'
  | '\r'
  ;

这与Java一起使用来读取包含以下内容的文件:

body Body = new body
Body.margin = 0
Body.padding = 0
div Container = new div
Container.width = 900px
Container.margin = 0 auto
div Header = new div
Header.width = 890px
Header.padding = 0px
end
div Leftbox = new div
Leftbox.width = 200px
Leftbox.float = left
end
div Rightbox = new div
Rightbox.width = 700px
Rightbox.float = right
end
clear
end
end

但是当我遍历词法分析器以打印所有标记时,我只接收Assignment,Newtype,Clear和End,它们只包含这些行。我希望令牌更深入,并告诉Java哪个类型的每个单词匹配(Num,Variable等),但行(Assignment,Newtype,Clear和End)似乎是唯一出现的

有什么建议吗? (我知道语法很俗气,在我尝试学习语言的时候第一次尝试)

1 个答案:

答案 0 :(得分:2)

您已经要求ANTLR将几乎所有内容都匹配为令牌,例如Newtype。使用newType作为解析器规则而不是词法分析器规则。