CUP

A Very Simple Example Scanner

付録の Scanner の例を bison マニュアルの中間記法電卓で確認CUP ファイルは、 import java_cup.runtime.*; terminal SEMI, PLUS, MINUS, TIMES, DIVIDE, MOD, EXPON, EOL, LPAREN, RPAREN; terminal UMINUS; terminal Integer NUMBER; non terminal Object…

カスタマイズ可能メソッド unrecovered_syntax_error()

「error EOL」があると発生しないようなので、はずしてCUP ファイルは、 import java_cup.runtime.*; parser code {: public void unrecovered_syntax_error(Symbol cur_token) { System.out.println("unrecovered_syntax_error: " + cur_token); } :}; term…

カスタマイズ可能メソッド syntax_error()

CUP ファイルは、 import java_cup.runtime.*; parser code {: public void syntax_error(Symbol cur_token) { System.out.println("syntax_error: " + cur_token); } :}; terminal A, EOL; non terminal Object input, line; input ::= | input line ; line…

カスタマイズ可能メソッド report_fatal_error()

「error EOL」があると発生しないようなので、はずしてCUP ファイルは、 import java_cup.runtime.*; parser code {: public void report_error(String message, Object info) { System.out.println("report_error: " + message); System.out.println("repor…

カスタマイズ可能メソッド report_error()

CUP ファイルは、 import java_cup.runtime.*; parser code {: public void report_error(String message, Object info) { System.out.println("report_error: " + message); System.out.println("report_error: " + info); } :}; terminal A, EOL; non term…

オプション -dump

Summary 以外も詳しく出力される Opening files... Parsing specification from standard input... Checking specification... Building parse tables... Computing non-terminal nullability... Computing first sets... Building state machine... Filling…

オプション -parser, -symbols

「-parser」で parser.java に出力されていたのを、 「-symbols」で sym.java に出力されていたのを変更できるようだ。

start 宣言

import java_cup.runtime.*; terminal A, EOL; non terminal Object input, line; start with input; line ::= EOL | A EOL {: System.out.println("*a*"); :} ; input ::= | input line ; 宣言の最後でなく、宣言の最初の方に書いたらエラーになった

init, scan 宣言

import java_cup.runtime.*; init with {: // Init 1 // Init 2 // Init 3 :}; scan with {: // Scan 1 // Scan 2 // Scan 3 :}; terminal A, EOL; non terminal Object input, line; input ::= | input line ; line ::= EOL | A EOL {: System.out.println(…

{action,parser} code 宣言

import java_cup.runtime.*; action code {: // Action Code 1 // Action Code 2 // Action Code 3 :}; parser code {: // Parser Code 1 // Parser Code 2 // Parser Code 3 :}; terminal A, EOL; non terminal Object input, line; input ::= | input line…

想定外の文字は null を返せば良かった?

想定外の文字は null を返せば良かったのか? (今までは適当なトークンを割り当ていていた)CUP ファイルは、 import java_cup.runtime.*; terminal CHAR, EOL; non terminal Object input, line; input ::= | input line ; line ::= EOL | CHAR:c EOL {: Sys…

「ラベル名」{left,right}

「ラベル名」left, 「ラベル名」right という変数が宣言されるらしい。 ユーザは入力ストリーム中のそれぞれの終端記号と 非終端記号の左辺と右辺の位置を見つけ出すことができる とあるが、どういうときに使いたいのかも正確な意味も良く分からない。CUP フ…

bison マニュアルの多機能電卓 練習問題2

bison マニュアルの多機能電卓 練習問題2を JFlex の examples に入っていたコードなどを参考に記述定数 PI, E を追加 CUP ファイルは、 import java_cup.runtime.*; parser code {: public static double func(String sym_name, double v) { if (sym_name =…

bison マニュアルの多機能電卓

bison マニュアルの多機能電卓を JFlex の examples に入っていたコードなどを参考に記述CUP ファイルは、 import java_cup.runtime.*; parser code {: public static double func(String sym_name, double v) { if (sym_name == "sin") { return Math.sin(v…

bison マニュアルの中間記法電卓

bison マニュアルの中間記法電卓を JFlex の examples に入っていたコードなどを参考に記述CUP ファイルは、 import java_cup.runtime.*; terminal OTHERS, PLUS, MINUS, MULT, DIV, EXPON, EOL, LB, RB; terminal UMINUS; terminal Double NUMBER; non term…

bison マニュアルの逆ポーランド記法電卓

bison マニュアルの逆ポーランド記法電卓を JFlex の examples に入っていたコードなどを参考に記述CUP ファイルは、 import java_cup.runtime.*; terminal OTHERS, PLUS, MINUS, MULT, DIV, EXPON, N, EOL; terminal Double NUMBER; non terminal Object in…

エラーのときの挙動を確認

CUP ファイルは、 import java_cup.runtime.*; terminal OTHER, CHAR, EOL; non terminal Object input, line; input ::= | input line ; line ::= EOL | CHAR:c EOL {: System.out.println(c); :} | error EOL ; Java ファイルは、 import java.io.*; impor…

はじめての CUP、JFlex で

そもそも JFlex の examples に入っていたコードを参考に書いていたんだけどCUP ファイルは、 import java_cup.runtime.*; terminal CHAR, A, EOL; non terminal Object input, line; input ::= | input line ; line ::= EOL | A EOL {: System.out.println(…

続 はじめての CUP

昨日との違い CHAR というトークンを作り、Lexer 内でエラーを発生させないように error リカバリを入れた Lexer 内の symbol() を削除 yyline, yycolumn を追加 CUP ファイルは、 import java_cup.runtime.*; terminal CHAR, A, EOL; non terminal Object i…

試飲?はじめての CUP

JFlex の examples に入っていたコードを参考にCUP ファイルは、 import java_cup.runtime.*; terminal A, EOL; non terminal Object input, line; input ::= | input line ; line ::= EOL | A EOL {: System.out.println("*a*"); :} ; Java ファイルは、 im…