我看到你如何去做的唯一方法是Echo
在你的词法分析器语法中定义一个规则,它匹配除andecho
之外的所有其他字符后跟的字符:\r
\n
Echo
: 'echo' ~('\r' | '\n')+
;
并确保该规则位于匹配标识符和关键字(如)的规则之前for
。
一个可能的开始的快速演示是:
grammar Test;
parse
: (echo | for)*
;
echo
: Echo (NewLine | EOF)
;
for
: For Identifier In range NewLine
Do NewLine
echo
Done (NewLine | EOF)
;
range
: '{' Integer '..' Integer ('..' Integer)? '}'
;
Echo
: 'echo' ~('\r' | '\n')+
;
For : 'for';
In : 'in';
Do : 'do';
Done : 'done';
Identifier
: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
;
Integer
: '0'..'9'+
;
NewLine
: '\r' '\n'
| '\n'
| '\r'
;
Space
: (' ' | '\t') {skip();}
;
如果您要解析输入:
echo for print example
for i in {0..10..2}
do
echo "Welcome $i times"
done
echo the end for now!
有了它,它看起来像:
替代文字 http://img571.imageshack.us/img571/5713/grammar.png
(我不得不稍微旋转一下图像,否则根本看不到它!)
HTH。