DLTK を使用して、Eclipse でスキーム用の IDE を実装しています。これまでのところ、語彙構造を認識する文法をプログラミングしています。
私はここで見ることができる公式の EBNF に従っています:
http://rose-r5rs.googlecode.com/hg/doc/r5rs-grammar.html
数字の文法の単純な形式を取得できません。たとえば、10進数、私は持っています
grammar r5rsnumbers;
options {
language = Java;
}
program:
NUMBER;
// NUMBERS
NUMBER : /*NUM_2 | NUM_8 |*/ NUM_10; //| NUM_16;
fragment NUM_10 : PREFIX_10 COMPLEX_10;
fragment COMPLEX_10
: REAL_10 (
'@' REAL_10
| '+' (
UREAL_10 'i'
| 'i'
)?
| '-' (
UREAL_10 'i'
| 'i'
)?
)?
| '+' (
UREAL_10 'i'
| 'i'
)?
| '-' (
UREAL_10 'i'
| 'i'
)?;
fragment REAL_10 : SIGN UREAL_10;
fragment UREAL_10
: UINTEGER_10 ('/' UINTEGER_10)?
| DECIMAL_10;
fragment UINTEGER_10 : DIGIT_10+ '#'*;
fragment DECIMAL_10
: UINTEGER_10 SUFFIX
| '.' DIGIT_10+ '#'* SUFFIX
| DIGIT_10+ '.' DIGIT_10* '#'* SUFFIX
| DIGIT_10+ '#'+ '.' '#'* SUFFIX;
fragment PREFIX_10
: RADIX_10 EXACTNESS
| EXACTNESS RADIX_10;
fragment DIGIT : '0'..'9';
fragment EMPTY : '""'; // empty is the empty string
fragment SUFFIX : EMPTY | EXPONENT_MARKER SIGN DIGIT_10+;
fragment EXPONENT_MARKER : 'e' | 's' | 'f' | 'd' | 'l';
fragment SIGN : EMPTY | '+' | '-';
fragment EXACTNESS : EMPTY | '#i' | '#e';
fragment RADIX_10 : EMPTY | '#d';
fragment DIGIT_10 : DIGIT;
問題は、何も認識していないことです。PREFIX_10 からの警告またはその解決方法がわかりません。ルールでフラグメントを使用しない場合、ファイルはコンパイルされません。これは、DIGIT_10 ルールが他のほとんどすべての以前のルールと同じ入力に一致することに文句を言うためです。
num_2、num_8、num_16 と同じです。
さらに、空の文字列の解決策がわかりません。
どうやってここに行くの?