这可能是一个非常明显的问题,但我似乎找不到任何帮助。目前,我有一个语法输入简单的命令,稍后通过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等),但行(赋值,Newtype, Clear和End)似乎是唯一出现的。
有什么建议吗?(我知道语法很俗气,这是我学习这门语言的第一次尝试)
您已经要求ANTLR将几乎所有内容匹配为令牌,例如Newtype。使用newType作为解析器规则,而不是词法分析器规则