これを行う方法を確認する唯一の方法は、レクサー文法で、 andを除く他のすべての文字が後に続くEcho
文字に一致するルールを定義することです。echo
\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。