識別浮點常量問題(編譯原理實驗二)
Problem Description
編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣告的時候就決定了;而常量的型別需要從常量的形式來判斷。
假設你是自動編譯器(ACM)開發小組的一員,負責Pascal語言編譯器的開發。你的任務是分析程式分解模組送來的檔案,判斷其中包含的字串是否合乎語法的Pascal浮點常量。
Pascal語言對浮點常量的語法要求是:一個浮點常量除了十進位制數碼之外,必須帶有一個小數點或一個指數(緊接在字母e或E之後,在正式文件中也被稱為比例因子)。如果該浮點常量含有小數點,則在小數點兩側都至少要有一個十進位制數碼。當然,在整個浮點常量或指數之前,也許會出現符號+或-。指數不能包含小數。空格也許會出現在浮點常量的前後,但不會出現在浮點常量中間。
請注意Pascal語言的語法規則沒有對浮點數常量的取值範圍作出任何假定。
Input
輸入只有一行,就是有待識別的字串。字串的長度不超過255。
Output
請將分析的結果按以下樣例的格式輸出。如果輸入檔案中的字串是Pascal浮點常量,請輸出字串“YES”,否則輸出字串“NO”。
Sample Input
1.2
Sample Output
YES
Hint
輸入:1 輸出:NO
輸入:1.0e-55 輸出:YES
輸入:e-12 輸出:NO
輸入:1e-12 輸出:YES
輸入:6.5E 輸出:NO
輸入:+4.1234567890E-9999 輸出: YES
.
import java.util.Scanner;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String aa = sc.nextLine();
int flag = 0;
//String pattern = "[\\+\\-]?[0-9]*(\\.\\d+)?([eE][\\+\\-]?[0-9]+)?";
String pattern1 = "[\\+\\-]?[0-9]+(\\.\\d+)([eE][\\+\\-]?[0-9]+)?";
String pattern2 = "[\\+\\-]?[0-9]+(\\.\\d+)?([eE][\\+\\-]?[0-9]+)";
//[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?
//[\\+\\-]?[0-9]*((\\\\\\.)?[0-9]*)?([eE][\\+\\\\-]?[0-9]+)?
//boolean isMatch = Pattern.matches(pattern, aa);
boolean is = Pattern.matches(pattern1, aa);
boolean i = Pattern.matches(pattern2, aa);
//if(isMatch == true) {
// flag++;
//}
if(is == true) {
flag++;
}
if(i == true) {
flag++;
}
if(flag >= 1) {
System.out.println("YES");
}else {
System.out.println("NO");
}
sc.close();
}
}
技術太菜,沒能模擬出來,只好用正規表示式做了~
相關文章
- ARMCC和GCC編譯ARM程式碼的軟浮點和硬浮點問題GC編譯
- 編譯原理實驗2:語法分析編譯原理語法分析
- 編譯原理實驗1:詞法分析編譯原理詞法分析
- react知識(二)重寫JSX編譯原理ReactJS編譯原理
- iOS浮點數精度問題iOS
- 1022編譯原理第二次作業問題感想編譯原理
- JS中浮點數精度問題JS
- js浮點數丟失問題JS
- SPI編譯問題編譯
- perl 編譯問題!編譯
- jive編譯問題編譯
- 【編譯原理實驗】Lab2(一)NFA確定化編譯原理
- 編譯核心的一點點經驗(轉)編譯
- 浮點數小知識點
- 小C語言--詞法分析程式(編譯原理實驗一)C語言詞法分析編譯原理
- 2017春季學期編譯原理期末實驗報告編譯原理
- [譯]浮點數的危害
- libmemcached編譯問題IBM編譯
- EBS form編譯問題ORM編譯
- Android實現二值點陣圖識別Android
- 編譯原理編譯原理
- 一個浮點數計算的問題
- Python Extension 編譯問題Python編譯
- 請教javac 編譯問題Java編譯
- cmake編譯問題解決編譯
- Myeclipse不能編譯問題Eclipse編譯
- 【問題記錄】—.NetCore 編譯問題NetCore編譯
- 五、面試必問知識點——ThreadLocal實現、原理、示例面試thread
- Flutter 編譯原理Flutter編譯原理
- 編譯原理概述編譯原理
- 永泰香港驗血查性別的原理▇相關問題解析
- javascript浮點數計算精度問題介紹JavaScript
- 【求教:如何解決 java 浮點數精度問題】Java
- 編譯原理第二章學習總結編譯原理
- 形式語言與自動機:實驗二——DFA識別句子
- go的編譯優化問題Go編譯優化
- nginx 編譯出現的問題Nginx編譯
- 解決:JPEGImageEncoder編譯問題編譯