jparsecドキュメント日本語訳
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[JAVAの記事一覧]]
[[構文解析の記事一覧]]
&topicpath;
*趣旨 [#x0113801]
jparsecの日本語訳のページがなかったので
適当に気が向いたときに翻訳してみるページです。
わかりやすいと思った記事を勝手に追加するのを良しとします。
英語はそんなに得意じゃないんだけどね。
ソースコード読めばなんとなくわかるから、そっちの方がいい...
と、おもったけど、きのせいだったみたい。
*目次 [#bca26b28]
#contents
*オリジナルページURL [#z8ecfe5c]
http://jparsec.codehaus.org/jparsec+Overview
*jparsec の概要 [#w06934a5]
jparsecで記述された典型的な構文解析プログラムで、プログラ...
*始め方 [#h1540338]
jparsecは、パーサ生成コードを元にパーサを構築します。パー...
parser.parse("code to parse");
あなたのお好みに合わせて、戻り値は計算結果や構文解析木に...
では、どのようにパーサを作るのでしょうか?下記に最も重要...
**Parserクラス [#m29d1670]
A parser encapsulates a piece of parsing logic and simple...
**Parsersクラス [#o43d4ecd]
パーサが共通に実装してます。
**Scannersクラス [#u3d6113c]
スキャナーが解析対象のソースコードの文字列をスキャンして...
**Terminalsクラス [#l6183fab]
提供するトークナイザは、識別子、整数、科学的な数などの一...
**OperatorTableクラス [#n44bf222]
演算子の構文における優先順位を担当します。 プログラマは演...
*パーサ定義をこのフークワーク用に記述し直す例のトップ5[#...
**orの記述 A ::= B|C|D [#oa4441a3]
これは論理的などちらかを選択する概念です。次のルール
A ::= B|C|D
は次のように記述できます。
Parser<Foo> a = Parsers.or(b, c, d);
**シーケンスの記述 A ::= BCD[#cd7b12ba]
これは、シーケンスのコンビネータです。
生成ルール
"A ::= BCD"
は次のように記述できます。
Parser<Foo> a = Parsers.sequence(b,c,d);
**map/sequence [#f99b7d60]
パーサを作る時, we typically want to not only recognize a...
Implementing anonymous class for the Map interfaces could...
**many/many1 [#c02acfad]
These combinators implement the "kleene star" and "kleene...
"A ::= B*"
は次のように記述できます。
Parser<Foo> foo = ...;
Parser<Void> a = foo.skipMany();
または
Parser<Foo> foo = ...;
Parser<List<Foo>> a = foo.many();
where the latter will additionally return a list of Foo o...
**lazy 後での評価 [#e177fd23]
生成規則は再帰処理を記述可能です。 (例えば, an expression...
*字句解析対構文解析 [#h7557774]
簡単な例では, スキャン段階ではすべて動作します。 例えば:
Parser<List<String>> numbers = Scanners.INTEGER.sepBy(Sc...
assertEquals(Arrays.asList("1", "2", "3"), numbers.parse...
しかしながら, 構文の規則が複雑になる時 、それと、スペース...
Terminalsクラスは共通のトークン化処理を提供しており、ソー...
A syntactical parser takes a list of tokens as input, thi...
*2パスパーサの典型的な構築手順 [#ob164d22]
**手順 1: Terminals 終端 [#t492dde1]
Use the pre-defined tokenizers and terminal syntactical p...
For example, the following parser parses a list of intege...
Terminals operators = Terminals.operators(","); // only ...
Parser<?> integerTokenizer = Terminals.IntegerLiteral.TO...
Parser<String> integerSyntacticParser = Terminals.Intege...
Parser<?> ignored = Parsers.or(Scanners.JAVA_BLOCK_COMME...
Parser<?> tokenizer = Parsers.or(operators.tokenizer(), ...
Parser<List<String>> integers = integerSyntacticParser.s...
.from(tokenizer, ignored.skipMany());
assertEquals(Arrays.asList("1", "2", "3"), integers.pars...
**手順2: 生成ルール [#w9c81006]
次の手順では以下にしめす生成ルールで文法解析機を作ります...
As in most recursive descent parsers, left-recursion need...
Parser.Reference<Expr> ref = Parser.newReference();
Parser<Expr> expr = Parsers.sequence(ref.lazy(), operato...
ref.set(expr);
It will fail with stack overflow!
A less obvious left-recursion is a production rule that l...
Parser.Reference<Expr> ref = Parser.newReference();
Parser<Expr> expr = Parsers.sequence(operators.token("-"...
ref.set(expr);
As many can occur 0 times, we have a potential left recur...
Although left recursive grammar isn't generally supported...
*便利技 [#f3702c8c]
Please see jparsec Tips for tips and catches.
http://jparsec.codehaus.org/jparsec+Tips
*Haskell版persecのwikiはこちら [#w16a8de9]
http://www.haskell.org/haskellwiki/Parsec
終了行:
[[JAVAの記事一覧]]
[[構文解析の記事一覧]]
&topicpath;
*趣旨 [#x0113801]
jparsecの日本語訳のページがなかったので
適当に気が向いたときに翻訳してみるページです。
わかりやすいと思った記事を勝手に追加するのを良しとします。
英語はそんなに得意じゃないんだけどね。
ソースコード読めばなんとなくわかるから、そっちの方がいい...
と、おもったけど、きのせいだったみたい。
*目次 [#bca26b28]
#contents
*オリジナルページURL [#z8ecfe5c]
http://jparsec.codehaus.org/jparsec+Overview
*jparsec の概要 [#w06934a5]
jparsecで記述された典型的な構文解析プログラムで、プログラ...
*始め方 [#h1540338]
jparsecは、パーサ生成コードを元にパーサを構築します。パー...
parser.parse("code to parse");
あなたのお好みに合わせて、戻り値は計算結果や構文解析木に...
では、どのようにパーサを作るのでしょうか?下記に最も重要...
**Parserクラス [#m29d1670]
A parser encapsulates a piece of parsing logic and simple...
**Parsersクラス [#o43d4ecd]
パーサが共通に実装してます。
**Scannersクラス [#u3d6113c]
スキャナーが解析対象のソースコードの文字列をスキャンして...
**Terminalsクラス [#l6183fab]
提供するトークナイザは、識別子、整数、科学的な数などの一...
**OperatorTableクラス [#n44bf222]
演算子の構文における優先順位を担当します。 プログラマは演...
*パーサ定義をこのフークワーク用に記述し直す例のトップ5[#...
**orの記述 A ::= B|C|D [#oa4441a3]
これは論理的などちらかを選択する概念です。次のルール
A ::= B|C|D
は次のように記述できます。
Parser<Foo> a = Parsers.or(b, c, d);
**シーケンスの記述 A ::= BCD[#cd7b12ba]
これは、シーケンスのコンビネータです。
生成ルール
"A ::= BCD"
は次のように記述できます。
Parser<Foo> a = Parsers.sequence(b,c,d);
**map/sequence [#f99b7d60]
パーサを作る時, we typically want to not only recognize a...
Implementing anonymous class for the Map interfaces could...
**many/many1 [#c02acfad]
These combinators implement the "kleene star" and "kleene...
"A ::= B*"
は次のように記述できます。
Parser<Foo> foo = ...;
Parser<Void> a = foo.skipMany();
または
Parser<Foo> foo = ...;
Parser<List<Foo>> a = foo.many();
where the latter will additionally return a list of Foo o...
**lazy 後での評価 [#e177fd23]
生成規則は再帰処理を記述可能です。 (例えば, an expression...
*字句解析対構文解析 [#h7557774]
簡単な例では, スキャン段階ではすべて動作します。 例えば:
Parser<List<String>> numbers = Scanners.INTEGER.sepBy(Sc...
assertEquals(Arrays.asList("1", "2", "3"), numbers.parse...
しかしながら, 構文の規則が複雑になる時 、それと、スペース...
Terminalsクラスは共通のトークン化処理を提供しており、ソー...
A syntactical parser takes a list of tokens as input, thi...
*2パスパーサの典型的な構築手順 [#ob164d22]
**手順 1: Terminals 終端 [#t492dde1]
Use the pre-defined tokenizers and terminal syntactical p...
For example, the following parser parses a list of intege...
Terminals operators = Terminals.operators(","); // only ...
Parser<?> integerTokenizer = Terminals.IntegerLiteral.TO...
Parser<String> integerSyntacticParser = Terminals.Intege...
Parser<?> ignored = Parsers.or(Scanners.JAVA_BLOCK_COMME...
Parser<?> tokenizer = Parsers.or(operators.tokenizer(), ...
Parser<List<String>> integers = integerSyntacticParser.s...
.from(tokenizer, ignored.skipMany());
assertEquals(Arrays.asList("1", "2", "3"), integers.pars...
**手順2: 生成ルール [#w9c81006]
次の手順では以下にしめす生成ルールで文法解析機を作ります...
As in most recursive descent parsers, left-recursion need...
Parser.Reference<Expr> ref = Parser.newReference();
Parser<Expr> expr = Parsers.sequence(ref.lazy(), operato...
ref.set(expr);
It will fail with stack overflow!
A less obvious left-recursion is a production rule that l...
Parser.Reference<Expr> ref = Parser.newReference();
Parser<Expr> expr = Parsers.sequence(operators.token("-"...
ref.set(expr);
As many can occur 0 times, we have a potential left recur...
Although left recursive grammar isn't generally supported...
*便利技 [#f3702c8c]
Please see jparsec Tips for tips and catches.
http://jparsec.codehaus.org/jparsec+Tips
*Haskell版persecのwikiはこちら [#w16a8de9]
http://www.haskell.org/haskellwiki/Parsec
ページ名: