識別浮點常量問題(編譯原理實驗二)
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();
}
}
技術太菜,沒能模擬出來,只好用正規表示式做了~
相關文章
- react知識(二)重寫JSX編譯原理ReactJS編譯原理
- iOS浮點數精度問題iOS
- libmemcached編譯問題IBM編譯
- SPI編譯問題編譯
- js浮點數丟失問題JS
- JS中浮點數精度問題JS
- 【編譯原理實驗】Lab2(一)NFA確定化編譯原理
- 【問題記錄】—.NetCore 編譯問題NetCore編譯
- Android實現二值點陣圖識別Android
- 小C語言--詞法分析程式(編譯原理實驗一)C語言詞法分析編譯原理
- 浮點數小知識點
- 編譯原理編譯原理
- Flutter 編譯原理Flutter編譯原理
- 永泰香港驗血查性別的原理▇相關問題解析
- 編譯原理第二章學習總結編譯原理
- 五、面試必問知識點——ThreadLocal實現、原理、示例面試thread
- go的編譯優化問題Go編譯優化
- nginx 編譯出現的問題Nginx編譯
- Gradle 編譯警告亂碼問題Gradle編譯
- Android編譯通過,執行編譯錯誤問題總結Android編譯
- 形式語言與自動機:實驗二——DFA識別句子
- 全面總結 JS 中浮點數運算問題JS
- Typescript編譯原理(一)TypeScript編譯原理
- Vue 模板編譯原理Vue編譯原理
- 編譯原理概覽編譯原理
- React Native babel編譯異常問題React NativeBabel編譯
- 一個nvcc編譯的小問題編譯
- CMake編譯Qt工程時的問題編譯QT
- arange浮點型別資料型別
- JavaScript解決浮點數算數運算精度問題JavaScript
- WebGL著色器32位浮點數精度損失問題Web
- 一個浮點數跨平臺產生的問題
- (C++)資料結構實驗二——迷宮問題C++資料結構
- 區塊鏈通識問題(二)區塊鏈
- 點選驗證碼不能實現重新整理問題
- 記錄一些工程編譯問題編譯
- Linux下C語言編譯的問題LinuxC語言編譯
- 用javac編譯servlet類出現問題Java編譯Servlet