final class OpenListToken
final class CommaToken
final class CloseListToken
final class NumberToken // Has a public final property "value" that contains the int
私も実装したトークナイザ:
[1,2, 3]
[ 3, 4]
[3 ,4,56, 7 ]
[]
私が実装したいくつかのクラスは、トークンを表すために(私のToken
インタフェースから継承します) :
static final Parser<OpenListToken> openListTokenParser
static final Parser<CommaToken> commaTokenParser
static final Parser<CloseListToken> closeListTokenParser
static final Parser<NumberToken> numberTokenParser
これらはすべて文字レベルで動作します。たとえば:
final NumberToken t = numberTokenParser.parse("123");
// t.value == 123
final OpenListToken u = openListToken.parse("[");
// Succeeds
今私は番号のリストを表しよりもクラスである、ListExpression
のパーサを作るためにそれらを結合したいと思います。これは[1,2,3]
のような文字列が、明らかではない[ 1, 2 ]
のような文字列のために働く
openListTokenParser
.next(numberTokenParser.sepBy(commaTokenParser))
.followedBy(closeListTokenParser)
:私のようなものを試してみました。
いくつかのパーサーを取り、それらの間にwhitespace*
を入れる演算子がありますか?
また、私のListExpression
パーサを、文字の代わりにToken
のインターフェイスインスタンスのストリーム上で動作させることはできますか?
あなたは空白を無視したい –
が@Mohsen_Fatemi正しい – sdgfsdh
はこれを試してください: '静的最終パーサは= Parsers.or( Scanners.JAVA_LINE_COMMENT、 Scanners.JAVA_BLOCK_COMMENT、 Scanners.WHITESPACES).skipMany()は無視; ' –